git pullでコンフリクトが出たときの解決方法!初心者向けに解説

git
\ Gitがよく分からない初心者の方へ /
さわっておぼえるGit入門
Gitがよく分からない初心者でも、
この1冊で基本操作を一通り理解できます。
👉 Amazonで詳しく見る
Kindle Unlimitedなら無料で読めます
▶ 無料で読む(Kindle Unlimited)

今回はgit pullでコンフリクト(競合)が発生したときの解決方法について解説します。
Gitを使っていると、こんなエラーで困ったことはありませんか?

  • CONFLICT (content): Merge conflict
  • pullしたらファイルに変な記号が出てきた
  • どう直せばいいか分からない

このような場合でも、手順さえ理解すれば誰でも解決できます。
この記事では、初心者向けに「コンフリクトの原因」と「具体的な解決手順」を分かりやすく説明します。

結論:コンフリクトは「手動で修正→コミット」で解決する

まず結論です。
git pullでコンフリクトが出た場合は、以下の手順で解決します。

  1. コンフリクトが発生したファイルを確認
  2. ファイル内の競合部分を手動で修正
  3. 修正後にadd
  4. commitして完了

つまり、どの内容を残すか自分で決める作業になります。

※補足
git pullは「fetch + merge」をまとめて実行するコマンドのため、実際にはmerge時にコンフリクトが発生しています。

git pullでコンフリクトが起きる原因

コンフリクトは、次のようなときに発生します。

同じファイルの同じ箇所を別の人が変更したとき

例えば、同じファイルの同じ行を下記のように変更したときです。

  • 自分:10行目を「こんにちは」に変更してプッシュ
  • 他の人:同じ10行目を「おはよう」に変更してpull

この状態でgit pullすると
Gitはどちらを採用すべきか判断できずに、コンフリクトが発生します。

コンフリクトが発生したときの表示

コンフリクトが起きると、ターミナルにこのように表示されます。

CONFLICT (content): Merge conflict in sample.txt
Automatic merge failed; fix conflicts and then commit the result.

また、対象ファイルを開くと、以下のような記述が追加されています。

<<<<<<< HEAD
自分の変更内容
=======
相手の変更内容
>>>>>>> branch-name

コンフリクトした場所に、「<」・「=」・「>」の記号がついています。
ここに、取得しようとしたファイルとの変更内容の差分が記載されています。

コンフリクトの解決手順【初心者向け】

ここから実際の解決手順を解説します。

① コンフリクトが発生したファイルを確認

git status

both modifiedと表示されているファイルが対象です。
(Unmerged paths と表示される場合もあります)

② ファイルを開いて内容を確認

コンフリクト部分には以下の記号が入っています。

  • <<<<<<< HEAD → 自分の変更
  • ======= → 区切り
  • >>>>>>> branch → 相手の変更

③ 残す内容を決めて修正

不要な記号を削除し、最終的に残したい内容だけにします。

修正後の完成形

どちらの修正が必要か、自分で判断しないといけません。
判断できない場合は、修正を先にプッシュした相手に相談したほうがいいかと思います。

※ポイント
記号(<<<<<<<など)は必ず削除する

④ 修正後にadd

git add ファイル名

⑤ commitして完了

git commit

これでコンフリクト解消です。
VSCodeなどのIDEで、対象ファイルのコンフリクトを修正し、add・commitしても問題ないです。

コンフリクトマージをやり直したい

コミット前に途中でやり直したい場合は、以下でマージを中止できます。

git merge --abort

最初の状態に戻せるので、安心してやり直すことができます。

VSCodeでのコンフリクト解決(初心者におすすめ)

初心者の方は、VSCodeを使うとかなり簡単に解決できます。
コンフリクトが発生すると、以下のボタンが表示されます。

  • Accept Current Change(自分を採用)
  • Accept Incoming Change(相手を採用)
  • Accept Both Changes(両方採用)

クリックすると、選んだ内容で書き換えてくれます。

コンフリクトを防ぐ方法

コンフリクトは完全には防げませんが、減らすことはできます。

こまめにpullする

頻繁に最新状態を取り込むことで衝突を減らせます。

git pull

作業前にpullする

作業開始前にpullしておくと安全です。

同じファイルを同時に触らない

チーム開発では担当を分けるのも重要です。
開発する機能をファイル単位で分けておくのも有効です。

よくあるミス

初心者がやりがちなミスも紹介します。

記号を消し忘れる

<<<<<<< HEAD

これが残っていると、プログラムとしてエラーになるかと思います。
コンフリクト修正したあとは、対象の機能を動作確認しておきましょう。

addせずにcommitしようとする

git commit

コミットできずにエラーになるため、必ずaddしてからcommitしましょう。

まとめ

git pullでコンフリクトが出た場合は、落ち着いて対応すれば大丈夫です。

  • コンフリクトは「変更の衝突」
  • ファイルを手動で修正する
  • add → commitで完了

最初は難しく感じますが、何度か経験するとすぐ慣れるかと思います。
修正を上手くマージして開発を進めていきましょう。

コメント