Git で git merge --squash を実行した直後の状態として正しいものはどれですか?
1〜4キーで選択、Enterで回答できます
解説
正解は「変更がワーキングツリーとインデックスに反映されるだけで」です。git merge --squash は、マージ元ブランチの変更内容をまとめて作業ツリーに適用し、ステージ(コミット候補として登録された状態)にするところで止まります。コミットは利用者が明示的に行います。実際のコマンドの流れgit switch main git merge --squash feature/login # 変更がステージされるだけ。ここではコミットされない git status # ステージ済みの変更を確認できる git commit -m "ログイン機能を追加" # 親が1つだけの通常コミットが作られる誤答が指す動作との違い「変更をひとまとめにしたコミットが自動的に作成され」は、GitHub の Squash and merge ボタンの挙動です。コマンドラインの --squash は自動コミットしません。「2つの親を持つマージコミット」は通常のマージ(git merge)の結果です。スカッシュでできるコミットの親は1つだけで、履歴は一直線になります。「マージ元の各コミットがそのまま複製され」は git rebase に近い動作で、スカッシュとは逆に1コミットずつ残ります。squash 後に同じブランチを使い続けると起きることスカッシュで作られたコミットには、マージ元ブランチのコミットとのつながりが記録されません。そのため 取り込み済みの feature ブランチを消さずに再度マージすると、Git は同じ変更を未取り込みとみなし、コンフリクトが起きやすくなります。スカッシュマージしたブランチは取り込み後に削除し、続きの作業は最新のマージ先から新しいブランチを切り直すのが安全です。参考git-merge Documentationプルリクエストのマージについて - GitHub Docs