【こんふりくと】
コンフリクト(マージ) とは?
最終更新:
💡 統合できない変更を、意図を確かめて解決
Gitが変更を自動で統合できず、解決を必要とする状態。同じ箇所の異なる編集のほか、削除と編集などでも起きます。変更の意図を確認して内容を直し、進行中の操作に応じて続行します。
📌 このページのポイント
- 同じ箇所の変更だけでなく、削除・改名などの組み合わせでも起きる
- テキストの競合ではマーカーで両側を示すことがある。すべての競合が同じ表示とは限らない
- 片側を選ぶだけでなく、必要なら双方の意図を満たす内容へ書き直す
- 修正・確認・git addの後、マージならgit merge --continueなどで完了する
- リベースでは続行方法やours/theirsの意味が違うので、git statusで操作を確認する
コンフリクトは何がぶつかるの?
Gitが変更を自動で統合できない状態だよ。同じ部分を別々に編集した場合が代表例だけど、一方が削除して他方が編集した場合などにも起こる。単に同じファイルを触っただけで必ず競合するわけではないんだ。
変な記号は何を意味する?
片方を選べばいい?
変更の目的を確かめよう。青と赤のどちらを採用する例もあるけど、両方の意図に合わせて別の内容を書く必要もある。マーカーを消すだけでなく、統合後の動作を確認することが大事だよ。
解決した後はどうする?
まずgit statusで進行中の操作と競合ファイルを確認する。内容を修正してテストし、git addで解決を登録する。マージならgit merge --continue、リベースならgit rebase --continueなど、その操作に合う方法で続けるんだ。
競合を減らす工夫はある?
小さな変更を早く共有し、同じ範囲の長い並行作業を避けよう。統合する前には未コミットの変更も整理する。競合せず統合できても、意味や動作が食い違うことはあるから、レビューやテストは必要だよ。
もっと詳しく知りたい人へ
oursとtheirsは常に自分と相手?
通常のマージではoursは現在の側、theirsは取り込む側です。マージ方式のリベースではoursが取り込み先から再構成中の側、theirsが再適用中の作業ブランチの側となります。名前だけで選ばず、実際の差分と操作を確認してください。
まとめ:ざっくりこれだけ覚えればOK!
「マージのコンフリクト」って出てきたら「変更を自動で統合できない状態」と思えばだいたいOK!
📖 おまけ:英語の意味
「Conflict」 = 衝突・競合
💬 ここではGitの変更の統合で起きる競合です。マージそのものと同義ではなく、すべてのマージで競合するわけではありません。