resolving-merge-conflicts について
Git のマージ、リベース、チェリーピックの競合を処理する手順を示すスキルです。変更の意図を追跡し、各ハンクを記録して、チェックと必要な履歴書き換えの確認が終わるまでコミットを遅らせます。
主な機能
- 01実行中の Git 操作を特定
- 02生成物とロックファイルを再生成
- 03元の意図に沿ってハンクを解決
- 04各ハンクの処理を記録
- 05コミット前にチェックを実行
- 06公開済み履歴の書き換えを審査
活用シーン
- 01双方の意図を保って競合を解決
- 02両親コミットと解決結果を比較
- 03リベース中に再発する競合を処理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bhagyamudgal/ skills --skill resolving-merge-conflictsインストール後、Claude Code で/resolving-merge-conflictsを入力して読み込まれたか確認します。
詳細
-
何かに手を加える前に、状況を確認します。
git statusで、マージ中、リベース中、チェリーピック中のどれかを確認します。リベースでは、oursはリプレイ先のアップストリーム、theirsは自分のコミットを指し、マージの場合とは逆になります。これを取り違えることが、誤った解決の最も一般的な原因です。次に、競合しているファイルを分類します。生成された成果物とロックファイルは、手作業でマージせず、ソースから再生成します。対象は
bun.lock、pnpm-lock.yaml、_generated/、スナップショットです。手書きのファイルだけを手順 2〜3 で処理します。 -
各競合の一次資料を探します。それぞれの変更がなぜ行われたのか、元の意図は何だったのかを把握します。コミットメッセージを読み、PR、元の課題やチケットを確認します。
-
競合マーカーではなく、一次資料に照らして各ハンクを解決します。両方の意図を保ちます。両立しない場合は、マージで明示された目的に合う方を選び、トレードオフを記録します。解決後の各行は、どちらか一方の元の内容、またはその両方を機械的に組み合わせた内容にたどれるようにします。
ステージングする前に、競合している各ファイルについて、解決内容と両方の親コミットとの差分を確認します。
git diff --cc <file>、またはgit diff :2:<file> <file>とgit diff :3:<file> <file>を実行します。両側のすべてのハンクを、いずれか一つの分類に必ず割り当てます。分類は、「保持」、「置き換えた内容を記録して置き換え」、「理由を記録して破棄」です。分類できないハンクは、解決済みのふりをした黙示的な破棄であり、未解決の競合です。コミットする前に、対応記録を提示します。必ず解決します。2 つの意図が本当に両立せず、どちらを選ぶか決める明示的な目的もない場合は、推測せずに作業を止め、解決案を 2 つともユーザーに提示します。
-
プロジェクトのチェックを実行します。このパイプラインは
/doneが担当します。受け入れレーンを選択し、それぞれを検証して状態を割り当て、レディネスカードを作成させます。そのカードで止め、最終セクションに記載された引き継ぎは行いません。マージ途中でコミットすると、マージメッセージではなく、生成された一般的な件名でマージが完了してしまうため、git-commitとfile-prは手順 5 まで保留します。マージによって壊れたものは修正します。 -
マージまたはリベースを完了します。すでに公開済み、または利用済みのコミットや参照を書き換える操作を行う場合は、その公開済み履歴に対する操作を続ける直前、または共有参照を更新する直前に
preflight-mutationsを呼び出します。操作、ローカル、アップストリーム、ベース、ヘッドの各 SHA、影響を受けるリモート参照、依存するブランチと PR、復旧用参照、明示的な書き換え許可を正確に渡します。続行する前に、その結果の契約に従います。未公開のローカルな競合解決では、このゲートを使用しません。すべてをステージングしてコミットします。リベース中の場合は、すべてのコミットがリプレイされるまで続けます。同じ競合がリプレイされた各コミットで再発することがよくあります。すべての競合で一貫した解決を保ってください。