【こんふりくと】

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

💡 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」 = 衝突、矛盾
💬 変更内容が「衝突」してどちらを正とするか決められない状態を指す
← 用語集にもどる