マージの仕組みとコンフリクトの原因
📝 問題の再掲
復習Q9: feature ブランチの変更を main に統合するコマンドは?
正答: git merge feature(main にいる状態で実行)
⚠️ よくある間違い
- マージ = 上書きだと思ってしまう(実際は「統合」)
- コンフリクトが怖くてマージを避ける
- コンフリクトの表示(<<< === >>>)の読み方がわからない
📖 段階的な説明
ステップ1:マージとは
2つのブランチの変更を1つにまとめる操作です。片方を消すのではなく、両方の変更を合体させます。
ステップ2:自動マージ(問題なし)
別々のファイルや、同じファイルでも別の行を変更した場合、Git が自動で統合してくれます。
main: 1行目を変更
feature: 5行目を変更
→ Git が自動で両方の変更を統合 ✅
ステップ3:コンフリクト(手動解決が必要)
同じファイルの同じ行を2つのブランチで別々に変更した場合、Git はどちらを採用すべきかわかりません。
main: 3行目を「こんにちは」に変更
feature: 3行目を「Hello」に変更
→ どっちを採用? → コンフリクト発生!
ステップ4:コンフリクトの解決手順
コンフリクトが起きると、ファイルに以下のような印がつきます:
<<<<<<< HEAD
こんにちは
=======
Hello
>>>>>>> feature
↑ HEAD(main)の内容
↑ ======= で区切り
↑ feature ブランチの内容
解決方法:
- どちらか(または両方を組み合わせて)正しい内容に書き換える
<<<<<<<=======>>>>>>>の行を削除するgit add→git commitで解決を記録する
ステップ5:コンフリクトを防ぐコツ
- こまめに
git pullして最新の状態を取り込む - 小さい単位でコミットする(大きな変更を一気にしない)
- チームで「誰がどのファイルを触るか」を共有する
💡 たとえ話
2人が同じノートの同じ行に別のことを書いた
Aさんが3行目に「りんご」と書き、Bさんも3行目に「バナナ」と書いた。ノートを1冊にまとめるとき、どっちを残す? → 2人で話し合って決める = コンフリクト解決
✅ 確認問題
Q: コンフリクトが発生するのはどんなとき?
A: 別のファイルを変更したとき
B: 同じファイルの同じ行を2つのブランチで変更したとき
答えを見る
B。別のファイルや別の行の変更は Git が自動でマージできます。同じ行を両方で変更したときだけコンフリクトが起きます。