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機能を使えばクリックだけで解消できる