Git コンフリクト解決: マージコンフリクトを解消する

git のマージコンフリクトを特定・理解・解決する方法をステップバイステップで解説。コンフリクトマーカー、解決戦略、ツールの使い方を紹介します。

git mergetool

詳細な説明

マージコンフリクトとは?

マージコンフリクトは、2つのブランチの差分を Git が自動的に解決できない場合に発生します。これは同じファイル同じ行が、各ブランチで異なる方法で変更された場合に起こります。

コンフリクトマーカー

コンフリクトが発生すると、Git は影響を受けたファイルにマーカーを挿入します:

<<<<<<< HEAD
const apiUrl = "https://api.production.com";
=======
const apiUrl = "https://api.staging.com";
>>>>>>> feature/new-api
  • <<<<<<< HEAD: 現在のブランチのバージョン
  • =======: 区切り線
  • >>>>>>> feature/new-api: 取り込み先ブランチのバージョン

解決の手順

  1. コンフリクトのあるファイルを特定する:
git status
# "both modified" のファイルが表示される
  1. 各ファイルを開き、正しいバージョンを選択する(または両方を組み合わせる)。

  2. コンフリクトマーカーを削除する<<<<<<<=======>>>>>>> の行を削除する。

  3. 解決済みのファイルをステージする:

git add src/config.ts
  1. merge または rebase を続行する:
git merge --continue
# または
git rebase --continue

マージツールの使用

# マージツールを設定する(例: VS Code)
git config --global merge.tool vscode
git config --global mergetool.vscode.cmd 'code --wait $MERGED'

# ツールを起動
git mergetool

Merge の中止

やり直したい場合:

git merge --abort
# または
git rebase --abort

予防戦略

  • main を自分のブランチに頻繁に merge することで差分を小さく保つ。
  • コミットを小さく集中的に保つ — 大きなコミットは merge が難しくなる。
  • 同じファイルを扱うときはチームメイトとコミュニケーションをとる
  • コードオーナーシップ(CODEOWNERS ファイル)を使って変更の重複を減らす。

コンフリクトはコラボレーションの自然な一部です。重要なのは、完全に避けることではなく、迅速かつ正確に解決することです。

ユースケース

2人の開発者が別々のブランチで同じ設定ファイルを変更し、プルリクエストの merge 時にコンフリクトが発生して、merge を完了する前に手動での解決が必要になる場面で使用します。

Try It — Git Command Builder

フルツールを開く