| name | resolve-conflicts |
| description | 現在のブランチに紐づくMerge Requestでターゲットブランチとのコンフリクトを検出し、対話的に解消する。 |
| disable-model-invocation | true |
| allowed-tools | Bash(git:*), Bash(glab:*), Read, Grep, Glob |
Merge Request コンフリクト解消
現在のブランチに紐づくMerge Requestで発生しているコンフリクトを検出し、解消する。
手順
1. 情報収集(並列実行)
以下を並列で実行する:
git status — 未コミットの変更がないか確認
glab mr list --source-branch $(git rev-parse --abbrev-ref HEAD) — 現在のブランチに紐づくMRを特定
git remote -v — リモート情報を取得
git fetch origin — 最新のリモート情報を取得
検証
- 未コミットの変更がある場合は、先にコミットまたはスタッシュするようユーザーに案内して終了する
- MRが見つからない場合は「MRが見つかりません」と通知して終了する
- 複数のMRがある場合はユーザーに選択してもらう
2. ターゲットブランチの特定とコンフリクト検出
2-1. ターゲットブランチの取得
MRの情報からターゲットブランチを取得する:
glab api projects/<project-path>/merge_requests/<mr-iid> --jq '.target_branch'
<project-path> はリモートURLから判別する(/ は %2F にエンコードする)
2-2. コンフリクトの検出
ターゲットブランチとのマージを試行してコンフリクトを検出する:
git merge --no-commit --no-ff origin/<target-branch>
- コンフリクトが発生しない場合は、マージを中止(
git merge --abort)し、「コンフリクトはありません」と通知して終了する
- コンフリクトが発生した場合は、コンフリクトファイルの一覧を取得する:
git diff --name-only --diff-filter=U
3. コンフリクトの解消
コンフリクトファイルをひとつずつ、以下のサイクルで解消する:
3-1. コンフリクト内容の把握
対象ファイルを読み込み、コンフリクトマーカー(<<<<<<<, =======, >>>>>>>)の箇所を特定する。
以下を理解する:
- HEADの変更(
<<<<<<< HEAD と ======= の間)— 現在のブランチでの変更
- ターゲットブランチの変更(
======= と >>>>>>> の間)— マージ先の変更
- 変更の意図と、両方の変更がそれぞれ何を目的としているか
3-2. 解消方針の決定
コンフリクトの内容を分析し、解消方針をユーザーに提示する:
- 両方の変更を統合: 両方の変更が異なる目的で、両立可能な場合
- 現在のブランチを優先: 現在のブランチの変更を採用する場合
- ターゲットブランチを優先: ターゲットブランチの変更を採用する場合
- 手動調整: 上記のいずれにも当てはまらず、カスタムな統合が必要な場合
具体的な解消後のコードを提示し、ユーザーの承認を得てから修正を適用する。
3-3. コンフリクトの解消
ユーザーの承認を得たら、コンフリクトマーカーを除去し、解消後のコードに置き換える。
解消したファイルをステージングする:
git add <resolved-file>
4. マージコミット
すべてのコンフリクトが解消されたら、マージコミットを作成する:
git commit -m "$(cat <<'EOF'
<target-branch>ブランチとのコンフリクトを解消
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
EOF
)"
5. 完了報告
解消結果を表形式でユーザーに報告する:
| ファイル | コンフリクト箇所 | 解消方針 |
|---|
| 対象ファイルパス | コンフリクトの概要 | 統合 / HEAD優先 / ターゲット優先 / 手動調整 |
報告後、リモートへのプッシュを行うかユーザーに確認する。
次のアクションをサジェストする:
/review-fix — レビューコメントが付いたらコードを修正
/sync-main — MRがマージされたらmainに切り替えて後片付け
注意事項
- コンフリクトの解消は必ずユーザーの承認を得てから行う。自動で解消しない
- ファイルごとに解消方針を提示し、コンテキストを十分に説明する
- コンフリクト解消中にエラーが発生した場合は
git merge --abort でマージを中止し、ユーザーに報告する
- バイナリファイルのコンフリクトは自動解消できないため、ユーザーに手動対応を案内する
- リモートへのプッシュは自動では行わない