Git コンフリクトの解決に Claude Code を活用する理由
チーム開発において、Git のマージコンフリクト(競合)は避けて通れない課題です。特に複数人が同じファイルを同時に編集するプロジェクトでは、git merge や git rebase のたびにコンフリクトが発生し、その解決に時間を取られることが珍しくありません。
Claude Code はターミナルから直接操作できるAIコーディングエージェントであり、コードの文脈を深く理解した上でコンフリクトを解決できます。単純なテキストの差分比較ではなく、「このコードが何をしているか」を理解して適切なマージ結果を提案してくれる点が、従来のマージツールとの大きな違いです。
マージコンフリクトが発生する仕組み
コンフリクトの解決方法を学ぶ前に、なぜコンフリクトが起きるのかを簡単に整理しておきましょう。
Git は3ウェイマージ(3-way merge)というアルゴリズムを使用しています。これは、2つのブランチの変更内容と、それらの共通の祖先(base)を比較して自動的にマージを行う仕組みです。
- 共通祖先(base): 2つのブランチが分岐した時点のファイル内容
- 自分のブランチ(ours): 現在チェックアウトしているブランチの変更
- 相手のブランチ(theirs): マージしようとしているブランチの変更
同じ行が両方のブランチで異なる変更をされている場合、Git は自動マージできず、手動解決を求めます。このとき、ファイル内にコンフリクトマーカー(<<<<<<<、=======、>>>>>>>)が挿入されます。
# コンフリクトマーカーの例
<<<<<<< HEAD
const API_ENDPOINT = "https://api.example.com/v2";
=======
const API_ENDPOINT = "https://api.example.com/v3";
>>>>>>> feature/update-apiこの例では、HEAD(現在のブランチ)が v2 を使い、feature/update-api ブランチが v3 を使おうとしていて、どちらを採用すべきか Git が判断できない状態です。
Claude Code でコンフリクトを解決する基本手順
ステップ 1: コンフリクトの状態を確認する
まず、マージやリベースを実行してコンフリクトが発生したら、Claude Code にその状態を伝えます。
# マージ実行後にコンフリクトが発生した場合
git merge feature/update-api
# CONFLICT (content): Merge conflict in src/config.ts
# Claude Code に解決を依頼
claude "git merge でコンフリクトが発生しました。すべてのコンフリクトを確認して解決してください"Claude Code は以下のステップを自動的に実行します。
git statusでコンフリクトファイルの一覧を取得- 各ファイルの差分を確認
- コンフリクトマーカーを解析して適切な解決策を提案
- ファイルを編集してコンフリクトを解消
ステップ 2: 解決内容のレビュー
Claude Code が提案した解決策は、必ず目視で確認しましょう。以下のようにプロンプトを工夫すると、より正確な解決が得られます。
# 解決方針を明示するプロンプト
claude "git merge のコンフリクトを解決してください。
方針:
- feature ブランチの変更を優先
- ただし、型定義の変更は main ブランチ側を維持
- テストファイルは両方の変更を統合"ステップ 3: コミットして完了
コンフリクトが解消されたことを確認し、マージコミットを行います。
# 解決されたファイルをステージング
git add .
# マージコミット
git commit -m "Merge feature/update-api: API v3 移行とテスト統合"リベース時のコンフリクト対応
git rebase はマージとは異なり、コミットごとにコンフリクトが発生する可能性があります。特にコミットの多いブランチをリベースすると、同じファイルで何度もコンフリクトが起きることがあります。
# リベース開始
git rebase main
# コンフリクト発生時
# CONFLICT (content): Merge conflict in src/utils/parser.ts
# error: could not apply abc1234... Add parser utility
# Claude Code に解決を依頼
claude "リベース中にコンフリクトが発生しました。
現在のコミット: abc1234 (Add parser utility)
src/utils/parser.ts のコンフリクトを解決して、
git rebase --continue で進められる状態にしてください"リベースでは、1つのコンフリクトを解決するたびに git rebase --continue を実行する必要があります。Claude Code にこのフローを伝えておくと、スムーズに進行できます。
# リベースの連続コンフリクト解決を効率化
claude "リベースのコンフリクトを1つずつ解決していってください。
各コンフリクト解決後に git add と git rebase --continue を実行し、
次のコンフリクトがあれば続けて解決してください。
すべて完了したら結果を報告してください"実践テクニック: 複雑なコンフリクトの解決パターン
パターン 1: 関数のリネームと内容変更が同時に起きた場合
一方のブランチが関数名を変更し、もう一方が関数の実装を変更するパターンは、手動解決が特に難しいケースです。
claude "コンフリクトの詳細分析をお願いします。
- main ブランチでは processData() が transformData() にリネームされている
- feature ブランチでは processData() にバリデーションロジックが追加されている
両方の変更を反映して、transformData() に新しいバリデーションロジックも含めてください"パターン 2: package.json や lock ファイルのコンフリクト
依存関係ファイルのコンフリクトは頻繁に発生しますが、手動で解決するとバージョンの不整合が起きやすい部分です。
# package.json のコンフリクト解決
claude "package.json のコンフリクトを解決してください。
方針: 両方のブランチで追加された依存関係をすべて含め、
バージョンが異なる場合は新しい方を採用してください"
# lock ファイルは再生成が安全
npm install
# または
yarn installパターン 3: 設定ファイルの構造変更
TypeScript の tsconfig.json や ESLint の設定ファイルなど、JSON/YAML 構造の変更がコンフリクトした場合も Claude Code が有効です。
claude "tsconfig.json のコンフリクトを解決してください。
- main ブランチでは strict モードの設定が変更されている
- feature ブランチでは paths エイリアスが追加されている
JSON として正しい構造を維持しつつ、両方の変更を反映してください"Claude Code の Hooks でコンフリクト解決を自動化する
Claude Code の Hooks 機能を使うと、コンフリクト発生時に自動的に通知を受けたり、解決のワークフローを効率化できます。
.claude/settings.json に以下のような設定を追加できます。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "if git status --porcelain | grep -q '^UU\\|^AA\\|^DD'; then echo 'CONFLICT_DETECTED: コンフリクトファイルがあります'; fi"
}
]
}
]
}
}この設定により、Claude Code が Bash コマンドを実行した後にコンフリクト状態を自動検出できます。より高度な自動化については、Claude Code Hooks 開発ワークフロー自動化ガイド で詳しく解説しています。
コンフリクト予防のベストプラクティス
解決テクニックと同じくらい重要なのが、コンフリクトの発生自体を減らすことです。
こまめなリベース: 長期間分岐したブランチほどコンフリクトが大きくなります。git rebase main を定期的に実行して差分を小さく保ちましょう。
ブランチの粒度を細かく: 1つのブランチで複数の機能を実装すると、コンフリクトの範囲が広がります。機能ごとにブランチを分割し、こまめにマージする戦略が有効です。
CODEOWNERS ファイルの活用: 特定のファイルの変更に責任者を設定することで、同じファイルを複数人が同時に変更する確率を下げられます。
コミュニケーション: チーム内で「今どのファイルを編集しているか」を共有するだけでも、コンフリクトを大幅に減らせます。
チーム全体の Git ワークフローを整備したい場合は、Claude Code チーム開発完全ガイド でブランチ戦略やレビュー自動化の詳細を解説しています。
コンフリクト解決時に便利な Git コマンド集
Claude Code に伝える前に、状況を正確に把握するためのコマンドを覚えておくと便利です。
# コンフリクトファイルの一覧を表示
git diff --name-only --diff-filter=U
# コンフリクトの詳細(3ウェイ差分)を表示
git diff --cc
# 特定ファイルの3ウェイマージ結果を確認
git show :1:src/config.ts # base(共通祖先)
git show :2:src/config.ts # ours(現在のブランチ)
git show :3:src/config.ts # theirs(相手のブランチ)
# マージを中断してやり直す
git merge --abort
# リベースを中断してやり直す
git rebase --abortこれらのコマンド出力を Claude Code に渡すことで、より正確なコンフリクト解決が可能になります。
# 3ウェイの差分情報を含めて Claude Code に依頼
claude "以下の3ウェイ差分を元にコンフリクトを解決してください:
$(git diff --cc src/config.ts)"全体を振り返って
Claude Code を活用した Git コンフリクトの解決は、単なる時間短縮だけでなく、コードの文脈を理解した質の高いマージ結果を得られるというメリットがあります。特にリベース時の連続コンフリクトや、関数のリネームと実装変更が同時に起きるような複雑なケースで、その効果を実感できるはずです。
コンフリクト解決の方針を明確に伝えること、解決結果を必ずレビューすること、そしてコンフリクトの予防策を併用することで、チーム開発のGitワークフローを大幅に効率化できます。Gitワークフローの自動化をさらに深めたい方には、Claude Code で Git ワークフロー自動化 も実装の同じ課題に取り組んでいる方の参考になれば幸いです。
本記事のテーマをより体系的に