CreaTools LogoCreaTools
Tips

Git コンフリクト、焦らず3分で直せる

2026-02-11

結論:マーカーを消して、正しい方を残す

コンフリクトが起きたとき、やることは1つだけ。

<<<<<<< HEAD
自分の変更
=======
相手の変更
>>>>>>> feature-branch

この3行のマーカー(<<<<<<<=======>>>>>>>)を消して、残したいコードだけにする。それで終わり。


コンフリクトが起きる仕組み

main:    A → B → C
feature: A → B → D

CとDが同じファイルの同じ行を変更していると、Gitは「どっちが正しいかわからない」と止まる。

逆に言えば、違うファイルや違う行なら自動でマージされる。コンフリクトが起きること自体は異常ではない。


実際の解消手順

1. どのファイルがコンフリクトしているか確認

git status
both modified: src/components/Header.tsx

both modifiedと表示されたファイルがコンフリクト中。

2. ファイルを開いてマーカーを探す

function Header() {
  return (
<<<<<<< HEAD
    <header className="bg-white shadow-md">
=======
    <header className="bg-gray-100 border-b">
>>>>>>> feature/redesign
      <nav>...</nav>
    </header>
  );
}

3. 「どっちを残すか」を決める

判断基準選ぶ方
自分の変更が最新の仕様HEAD側
相手の変更が正しいfeature側
両方必要手動でマージ

4. マーカーを消して、正しいコードだけ残す

function Header() {
  return (
    <header className="bg-gray-100 border-b">
      <nav>...</nav>
    </header>
  );
}

マーカー3行を完全に消すこと。1つでも残すと構文エラーになる。

5. addしてcommit

git add src/components/Header.tsx
git commit

コミットメッセージはGitが自動で用意してくれる。そのまま保存でいい。


私がやらかした失敗

マージ中にコンフリクトが10ファイルで起きた。焦って全ファイルで「自分の変更」を残した。

→ 相手がその週に入れたバグ修正が全部消えた → 本番でバグが再発 → 「なんで直したはずのバグが戻ってるの?」とSlackで騒ぎに

コンフリクト解消は「自分の変更を残す作業」ではない。「正しい方を選ぶ作業」。 1ファイルずつ差分を確認する手間を惜しんだ結果、余計に時間がかかった。


VSCode なら もっと簡単

VSCodeでコンフリクトファイルを開くと、マーカー部分に選択肢が表示される。

  • Accept Current Change → 自分の変更を採用
  • Accept Incoming Change → 相手の変更を採用
  • Accept Both Changes → 両方残す

クリックするだけでマーカーが消えてコードが整理される。ターミナルで手動編集するより確実。


複数ファイルのコンフリクト

ファイルが多いときの進め方。

# コンフリクト中のファイル一覧
git diff --name-only --diff-filter=U

1ファイルずつ開いて解消 → git add → 全部終わったら git commit

途中で「もう無理」となったら:

# マージ自体をなかったことにする
git merge --abort

やり直しがきく。焦る必要はない。


rebaseでのコンフリクト

rebase中のコンフリクトは、1コミットずつ順番に解消する。

# コンフリクトを解消してaddした後
git rebase --continue

# やめる
git rebase --abort

mergeとの違い:rebaseはコミットごとに止まるので、コンフリクトが複数回起きることがある。面倒だがやることは同じ。


コンフリクトを減らすコツ

完全になくすのは無理。でも頻度は下げられる。

やること効果
こまめにmain/developをマージ差分が小さいうちに解消できる
1つのファイルを複数人で同時に触らないそもそも起きにくい
機能単位でブランチを小さく切るコンフリクト範囲が限定される
PRを長期間放置しない差分が膨らむ前にマージ

まとめ

  • コンフリクト = マーカーを消して正しい方を残すだけ
  • 「自分の変更を残す」のではなく「正しい方を選ぶ」
  • --abortでいつでもやり直せる。焦らない
  • VSCodeのUI機能を使えばクリックだけで解消できる

関連記事:git reset と revert、どっちを使う?