merge-base-branch について
merge-base-branchは、選択したベースブランチを現在のGitブランチにマージし、lint、カバレッジテスト、ビルドを実行するスキルです。ブランチの確認や競合解決を案内し、作成したコミットと結果をまとめます。
主な機能
- 01ベースブランチの特定と選択
- 02選択したブランチの取得とマージ
- 03競合解決のガイド
- 04lint、カバレッジテスト、ビルドの実行
- 05結果と作成コミットの要約
活用シーン
- 01機能ブランチをベースブランチに同期
- 02ガイドに沿ったマージ競合の解決
- 03マージ後のローカル品質チェック
- 04マージとチェック結果の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ morphet81/ cheat-sheets --skill merge-base-branchインストール後、Claude Code で/merge-base-branchを入力して読み込まれたか確認します。
詳細
選択したベースブランチを現在のブランチにマージし、リンターのチェックが問題なく完了し、テストカバレッジが完全で、ビルドが成功する状態にします。ブランチを親ブランチと完全に同期し、CI 品質のチェックをローカルで通過させたい場合に使用します。
使い方:
/merge-base-branch— 以下のワークフローをすべて実行します
前提条件:
- リポジトリのルートは git チェックアウトであり、名前付きブランチ上にある必要があります(detached HEAD は不可)。
- プロジェクトが Node/npm を使用する場合、
package.jsonでlint、test:coverage、buildの各スクリプトが定義されている必要があります。package.jsonがない場合、またはこれらのスクリプトが1つでも欠けている場合は、何が不足しているかを報告して停止します(必須のチェックを実行せずにマージや処理を進めてはいけません)。
手順:
-
現在のブランチ:
git branch --show-currentを実行します。detached HEAD の場合はユーザーに知らせて停止します。
-
ベースブランチ候補を特定してから、ユーザーに選択してもらう:
- まず、リポジトリのルートに
.agentがある場合は、baseBranch=<value>を読み取ります。その値が検出された候補です(存在する場合)。 - それ以外の場合は、git から推定します。
git merge-base --fork-point main HEAD、git merge-base --fork-point master HEAD、git merge-base --fork-point develop HEADを実行します。コミットを返したブランチ名は一致とみなします。一致が1つだけの場合、それが検出された候補です。複数一致する場合は、main、master、developの優先順位で選択します。一致するものがない場合、検出された候補は未設定です。 AskUserQuestionを使い、マージするベースブランチをユーザーに選んでもらいます。選択肢には必ずmainを含めます。検出された候補が設定されていてmainと異なる場合は、それも選択肢に含めます。originに存在する(またはローカルに存在する)場合は、masterとdevelopも追加の選択肢として含めます。各選択肢には短い説明を付けます(例:「履歴から検出:develop」)。回答を待ち、選択されたブランチを<base-branch>とします。
- まず、リポジトリのルートに
-
ベースブランチを確認してフェッチする:
git rev-parse --verify origin/<base-branch>を実行して確認します。失敗した場合はgit rev-parse --verify <base-branch>で確認します。どちらも存在しない場合はユーザーに知らせて停止します。git fetch origin <base-branch>を実行します。失敗した場合はエラーを表示して停止します。
-
ベースブランチとすでに同期済みの場合は停止する:
- フェッチ後にその参照が存在する場合は
<merge-ref>をorigin/<base-branch>とし、存在しない場合は<base-branch>(ローカルのみ)とします。 git rev-list --count HEAD..<merge-ref>を実行します(同等の方法として、git log --oneline HEAD..<merge-ref>にコミットがないことを確認します)。- コミット数が0の場合、現在のブランチにはすでに
<merge-ref>のすべての変更が含まれており、マージは不要であることをユーザーに伝えます。作業ツリーがクリーンでない場合は、未コミットの変更が残っていることも伝えます。停止します(このワークフローでは WIP をコミットせず、マージも lint/テスト/ビルドも実行しません)。
- フェッチ後にその参照が存在する場合は
-
マージ前に未コミットの作業をすべてコミットする:
git statusにコミットが必要なステージ前/ステージ済み/未追跡の変更が表示されない場合は、手順6に進みます。- それ以外の場合は、作業ツリー内のすべてをステージしてコミットします(現在のセッションで変更したファイルだけに限定しません)。差分に明確に別々の論理的なまとまり(例:機能領域やディレクトリごとのグループ)が含まれる場合は、複数のコミットに分けます。各コミットには内容が明確に分かるメッセージを付けます。
git addで個別に選択する(またはgit add -pを使う)ことで、まとまりのあるコミットを作成します。複数の異なるまとまりがある場合に、無関係な作業を1つのコミットにまとめてはいけません。
-
ベースブランチをマージする:
git merge origin/<base-branch> --no-editを実行します(origin/<base-branch>が存在せず、ローカルブランチが存在する場合に限り、git merge <base-branch> --no-editを使用します)。- マージが成功した場合は、マージしたコミットを簡潔にまとめます。
-
競合を解決してマージを完了する:
- 競合がある場合は、
git diff --name-only --diff-filter=Uでファイルを一覧表示します。各ファイルを解決し(競合マーカーを削除し、意図に沿って統合または選択します。上流の修正はベースブランチを優先し、機能コードは現在のブランチのものを維持します)、解決した各ファイルをgit addしてから、マージが完了するまでgit merge --continue --no-editを実行します。
- 競合がある場合は、
-
Lint:
- リポジトリのルートから
npm run lintを実行します。報告された問題をすべて修正し、成功するまで再実行します。
- リポジトリのルートから
-
Lint 後のコミット(変更がある場合):
- Lint の修正(またはフォーマッターによる変更)でファイルが変更された場合は、適切なメッセージを付けてコミットします(変更内容に応じて、複数のコミットに分けてもかまいません)。
-
カバレッジ付きテスト:
npm run test:coverageを実行します。失敗した場合は、カバレッジレポートとエラー出力を確認し、すべての行が 100% カバーされるまで(プロジェクト/ツールの基準に従って)テストを追加または調整します。コマンドが成功するまで、再実行と調整を繰り返します。
-
テスト/カバレッジ関連の変更をコミット:
- 手順 10 で行ったテストまたはソースの変更を、分かりやすいメッセージを付けてコミットします。
-
ビルド:
npm run buildを実行します。コンパイルまたはバンドラーのエラーを修正し、成功するまで再実行します。
-
ビルド修正のコミット(修正がある場合):
- 手順 12 でファイルが変更された場合は、コミットします。
ユーザー向けの概要: 使用したベースブランチ、マージ結果(または「すでに最新の状態」)、Lint/テスト/ビルドの結果、および実行中に作成したコミットの一覧。
コメント
Markdown 対応