チーム開発で必ずと言っていいほど遭遇するのがコンフリクト (Conflict)、つまり変更の衝突です。
多くの初学者がここでパニックに陥りますが、心配は無用です。コンフリクトはGitのエラーではありません。Gitが**「僕だけでは判断できないから、人間である君が決めてくれないか?」**と、礼儀正しく質問してきている状態なのです。
この章では、最も代表的なトラブルであるマージコンフリクトの正体と、それを解決するための冷静な手順を学びます。
コンフリクトは、git merge
や git pull
を実行した際に、Gitが変更を自動で統合できなかった場合に発生します。
具体的には、2つの異なるブランチで、同じファイルの、同じ行が、それぞれ別の内容に変更されている場合に起こります。Gitはどちらの変更が正しいのかを機械的に判断できないため、処理を中断してユーザーに判断を委ねるのです。
例えるなら:
君と友人が、共有している一つの小説ファイルの同じ行を、それぞれ別の文章に書き換えてしまった状態です。
これを自動で一つにまとめることは不可能です。どちらの扉が正しいのかは、作者である君たち人間が決めるしかありません。これがコンフリクトの本質です。
コンフリクトが発生しても、慌てず、以下の手順に沿って対処すれば大丈夫です。
git merge
などを実行した際、ターミナルに以下のようなメッセージが表示されたら、コンフリクトが発生した合図です。
Auto-merging [ファイル名]
CONFLICT (content): Merge conflict in [ファイル名]
Automatic merge failed; fix conflicts and then commit the result.