【こんふりくと】

コンフリクト(マージ) とは?

最終更新:
💡 Gitが「どっちが正解かわからん!」と手を止めた状態
📌 このページのポイント
マージコンフリクト:同じ行を別々に編集 ブランチA color: "blue" → 青に変更した ブランチB color: "red" → 赤に変更した マージ! <<<<<<< HEAD color: "blue" ======= color: "red" >>>>>>> branch-b どちらを採用するか手動で解決する必要がある
マージコンフリクトのイメージ
ひよこ ひよこ
コンフリクトって何がぶつかってるの?
ペンギン先生 ペンギン先生
同じファイルの同じ行を、2つのブランチがそれぞれ違う内容に変えたときにぶつかる。Gitは「どっちが正しいのか俺が判断できない!」って止まって、人間に決めてもらう。
ひよこ ひよこ
ファイルに変な記号が入るって聞いたけど?
ペンギン先生 ペンギン先生
そう。「<<<<<<< HEAD」から「=======」までが今いるブランチの変更、「=======」から「>>>>>>> feature」までが取り込もうとしたブランチの変更。この記号ごと書き直して正しい内容にするのが解消作業。
ひよこ ひよこ
どうやって解消するの?
ペンギン先生 ペンギン先生
3つの選択肢がある。①自分のブランチの変更を採用、②相手ブランチの変更を採用、③両方を混ぜて新しく書く。VSCodeなら「Accept Current Change」「Accept Incoming Change」ボタンで視覚的に選べるよ。
ひよこ ひよこ
コンフリクトを減らすためにできることは?
ペンギン先生 ペンギン先生
こまめにmainブランチの変更を自分のブランチに取り込む(git pull/rebase)と、差が広がる前に小さいうちに解消できる。あと同じファイルを複数人が長期間並行して触らないよう、作業範囲を分けて設計するのも有効。
ひよこ ひよこ
解消したつもりでマーカーを残したままコミットしてしまうことってある?
ペンギン先生 ペンギン先生
あるある、あるある。「<<<<<<」がソースコードに残ったままデプロイされて本番障害になったケースは実際によくある。リンターやCIでコンフリクトマーカーを検知する設定を入れておくと防げる。「git diff」で確認してからコミットする習慣も大事。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
コンフリクトって出てきたら「同じ箇所の変更がぶつかってGitが止まった状態」と思えばだいたいOK!
📖 おまけ:英語の意味
「conflict」 = 衝突、矛盾
💬 変更内容が「衝突」してどちらを正とするか決められない状態を指す
← 用語集にもどる