From git-actions
Git コンフリクト解消の支援。コンフリクトを分析し、解消案を生成・提示して、ユーザー承認後に適用する。Use when merge conflicts occur, when git merge fails with conflicts, or when user needs help resolving git conflicts.
How this skill is triggered — by the user, by Claude, or both
Slash command
/git-actions:resolve-conflictsThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
このスキルはマージコンフリクトを分析し、解消案を生成・提示して、ユーザー承認後に適用するワークフローを提供します。
このスキルはマージコンフリクトを分析し、解消案を生成・提示して、ユーザー承認後に適用するワークフローを提供します。
重要: git コマンドは作業ディレクトリで直接実行する。git -C は使用禁止。
以下の git コマンドを並列で実行し、コンフリクト状態を把握する:
git status --porcelain # UU/AA/DD/AU/UA/DU/UD マーカー検出
git diff --name-only --diff-filter=U # unmerged ファイル一覧
コンフリクト種類の判定:
| 判定ファイル | 種類 | 対応 |
|---|---|---|
MERGE_HEAD が存在 | merge コンフリクト | 対応 |
REBASE_HEAD が存在 | rebase コンフリクト | 非対応、エラーメッセージ表示 |
CHERRY_PICK_HEAD が存在 | cherry-pick コンフリクト | 非対応、エラーメッセージ表示 |
| いずれも存在しない | コンフリクト状態ではない | エラー終了 |
rebase/cherry-pick コンフリクトの場合は以下を表示:
現在は rebase/cherry-pick コンフリクトの自動解消には対応していません。
手動で解消するか、以下のコマンドで中止してください:
- git rebase --abort
- git cherry-pick --abort
マージコンフリクト中は git merge --abort でいつでもマージ前の状態に完全復元できる。
別途バックアップを取る必要はない(git stash はコンフリクト状態では実行不可)。
以降の全ステップで、ユーザーが中止を選択した場合のロールバック手段として
git merge --abort が利用可能であることを常に案内する。
各コンフリクトファイルについて以下を実行:
git merge-base HEAD MERGE_HEAD
分岐点を起点に、両ブランチの変更を時系列で把握する。
# ours 側(現在のブランチ = main)の変更履歴
git log <merge-base>..HEAD --oneline --follow -- <file>
# theirs 側(マージ元ブランチ)の変更履歴
git log <merge-base>..MERGE_HEAD --oneline --follow -- <file>
# 各コミットの詳細(変更内容の把握に必要な場合)
git show <commit-hash> -- <file>
以下の観点で両側の変更を分析する:
| 分析項目 | 確認内容 |
|---|---|
| 時系列 | どちらの変更が先か、どういう順序で変更されたか |
| 変更の種類 | 追加 / 修正 / 削除 / リファクタリング |
| 変更の意図 | コミットメッセージから目的を読み取る |
| 依存関係 | 一方の変更が他方の前提になっていないか |
コンフリクトマーカー(<<<<<<<, =======, >>>>>>>)を解析し、
ours 側と theirs 側の具体的なコード差分を把握する。
履歴分析の結果に基づき、以下のパターンで解消戦略を決定:
| パターン | 典型例 | 解消戦略 |
|---|---|---|
| 追加 vs 追加 | 両ブランチで別の関数/import を追加 | 両方残す(統合) |
| 修正 vs 追加 | 一方が既存コードを修正、他方が新コードを追加 | 両方残す(位置を調整) |
| 修正 vs 修正(同一箇所) | 同じ関数を別々に修正 | 時系列と意図を加味して統合案を生成 |
| 削除 vs 修正 | 一方がコードを削除、他方が同じコードを修正 | ユーザー判断を求める |
| リファクタ vs 機能追加 | 一方がリネーム/移動、他方が機能追加 | リファクタを基盤に機能追加を適用 |
重要: 元ブランチから切ったブランチのコミットと、 元ブランチの履歴変更・追加による衝突が最も多い。 この場合、両方の変更は独立した意図を持つことが多く、 「両方残す」が正しい解消になるケースが多い。
コンフリクトファイルを2カテゴリに分類:
| カテゴリ | 判定基準 | 確認方式 |
|---|---|---|
| 自明な解消 | 片方が追加のみ / 空白差分のみ / import 文の追加のみ | 一括提示・一括承認 |
| 要判断の解消 | 両方にビジネスロジック変更 / 削除と変更の競合 | 個別提示・個別承認 |
判定に迷った場合は「要判断」に分類する(安全側に倒す)。
各コンフリクトについて解消案を生成:
自明な解消が存在する場合、まとめて提示:
要判断の解消はファイルごとに以下のフォーマットで提示:
## <ファイル名> のコンフリクト解消案
### 変更履歴の概要
- **分岐点**: <merge-base のハッシュ> (<日時>)
- **ours 側 (main)**: N コミット
- <hash> <message> (<日時>)
- ...
- **theirs 側 (<branch>)**: N コミット
- <hash> <message> (<日時>)
- ...
### コンフリクト箇所
- 箇所 N: 行 XX-YY
- ours: <変更の説明>
- theirs: <変更の説明>
- パターン: 追加 vs 追加
### 解消案
<diff 形式で解消後のコードを表示>
### 判断根拠
<時系列と内容に基づく解消理由の説明>
ユーザーが中止を選択した場合:
git merge --abort
元のブランチに戻り、処理を終了する。
承認された解消案をファイルに書き込む:
git add <resolved-files>
git status
git diff --staged
結果をユーザーに提示し、以下を明示:
git merge --abort が可能かどうか解消結果のサマリーを表示:
git merge --abort でロールバック可能次のステップを案内:
git commit でマージ完了を促すgit merge --abort 以外の破壊的操作--force オプション付きの操作以下のファイルにコンフリクトがある場合は特別警告を表示:
.env, .env.* - 環境変数ファイルcredentials.json, secrets.* - 機密情報ファイル*.key, *.pem, *.cert - 証明書・鍵ファイル警告メッセージ:
⚠ 機密ファイルにコンフリクトが検出されました: <ファイル名>
機密情報が含まれる可能性があります。解消案の内容を慎重に確認してください。
# Step 1: コンフリクト検出
$ git status --porcelain
UU src/config.ts
UU src/utils.ts
# Step 2: 復元手段の確認
# git merge --abort でいつでもマージ前の状態に完全復元可能
# Step 3: 履歴ベースのコンフリクト分析
$ git merge-base HEAD MERGE_HEAD
abc1234
$ git log abc1234..HEAD --oneline --follow -- src/config.ts
def5678 feat: 新しい認証モジュールの import を追加
$ git log abc1234..MERGE_HEAD --oneline --follow -- src/config.ts
ghi9012 feat: ログモジュールの import を追加
$ git log abc1234..HEAD --oneline --follow -- src/utils.ts
jkl3456 fix: formatDate にタイムゾーン対応を追加
$ git log abc1234..MERGE_HEAD --oneline --follow -- src/utils.ts
mno7890 refactor: formatDate のフォーマット文字列を変更
📋 コンフリクト分析結果:
1. src/config.ts (自明)
- パターン: 追加 vs 追加(import 文)
- ours: 認証モジュール import 追加 (def5678)
- theirs: ログモジュール import 追加 (ghi9012)
- 解消戦略: 両方残す(独立した追加)
2. src/utils.ts (要判断)
- パターン: 修正 vs 修正(同一箇所)
- ours: タイムゾーン対応追加 (jkl3456)
- theirs: フォーマット文字列変更 (mno7890)
- 時系列: ours が先、theirs が後
- 解消戦略: 両方の変更を統合案として生成
# Step 5: ユーザー確認
[自明な解消] src/config.ts の import 統合を一括適用してよいですか?
→ はい、一括適用
## src/utils.ts のコンフリクト解消案
### 変更履歴の概要
- 分岐点: abc1234 (2026-02-10)
- ours 側 (main): 1 コミット
- jkl3456 fix: formatDate にタイムゾーン対応を追加 (2026-02-12)
- theirs 側 (feature/logging): 1 コミット
- mno7890 refactor: formatDate のフォーマット文字列を変更 (2026-02-14)
### コンフリクト箇所
- 箇所 1: 行 15-25
- ours: タイムゾーンパラメータ追加と Intl.DateTimeFormat 使用
- theirs: フォーマット文字列を ISO 8601 準拠に変更
- パターン: 修正 vs 修正(同一箇所)
### 解消案
(diff 形式で統合後のコードを表示)
### 判断根拠
両コミットは独立した目的(タイムゾーン対応 / フォーマット標準化)。
theirs のフォーマット変更を基盤に、ours のタイムゾーン対応を適用。
→ はい、適用
# Step 6: 適用
$ git add src/config.ts src/utils.ts
$ git status
$ git diff --staged
# Step 7: 完了報告
コンフリクト解消完了
- 解消ファイル: 2/2
- コミット前であれば git merge --abort でロールバック可能
- 次のステップ: git commit でマージを完了してください
⚠ マージ中にコンフリクトが発生しました。
git-resolve-conflicts スキルでコンフリクト解消を実行します。
[コンフリクト解消フローを実行]
✅ コンフリクト解消完了
マージコミットの作成に進みます。
# ユーザーが中止を選択
$ git merge --abort
マージを中止しました。元のブランチに戻ります。
npx claudepluginhub biwakonbu/cc-plugins --plugin git-actionsGuides through git merge conflicts one by one, parsing conflict markers, explaining why each conflict occurred via git history, and presenting resolution options with reasoning.
Resolves Git merge and rebase conflicts efficiently using bulk strategies like `git checkout --theirs/--ours` over manual conflict marker editing. Activates on merge/rebase conflicts.
Analyzes git merge conflicts by type and context, proposes automated/manual resolutions, and validates fixes. Handles content, structural, semantic, and formatting issues.