land-to-main について
Land to Main は、リモートに触れずに作業ブランチをローカルの main に反映するスキルです。作業ツリーとテストを確認し、リベース後に早送りし、予期しない問題や複雑な失敗ではユーザーの指示を待ちます。
主な機能
- 01ブランチと作業ツリーの事前確認
- 02リベース前のコミット確認
- 03ローカル main へのリベース
- 04反映前の lint とテスト
- 05履歴を書き換えない早送り
活用シーン
- 01完了した作業ブランチのローカル反映
- 02未コミット変更の混入防止
- 03競合やチェック失敗時の安全な停止
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ anorth/ agent-skills --skill land-to-mainインストール後、Claude Code で/land-to-mainを入力して読み込まれたか確認します。
詳細
main に取り込む
現在の作業ブランチを**ローカルの main**に取り込みます。リモートは対象外です。プッシュやプルは行わないでください。
前提条件(失敗時はすぐに停止)
mainにいないこと:HEADがmainの場合は拒否して停止します。- 作業ツリーがクリーンであること:コミットされていない変更(ステージ済み、未ステージを問わず)がある場合は停止します。取り込みの一環としてコミットしてはいけません。
- すでに取り込み済みでないこと:作業ブランチと
mainが同じコミットを指している場合は、そのことを報告して停止します(作業はありません)。
ワークフロー
以下の手順を順番に実行します。予期しないエラーが発生した場合は、停止してユーザーの指示を待ちます。
1. 履歴を確認する
作業ブランチ上にあり、main にはないコミットを確認します(git log main..HEAD)。
- 通常はそのまま取り込みます。
- WIP/一時的なもの/「後で修正」といったコミットがある場合は、続行する前に確認してください。ユーザーから依頼がない限り、スカッシュや履歴の書き換えを行ってはいけません。
2. ローカルの main にリベースする
git rebase main
- 単純なコンフリクト(明らかに片側だけの変更、または機械的に解決できるもの):解決し、
git addを実行して続行します。 - 複雑なコンフリクトや意味的なコンフリクト:停止してコンフリクトを説明し、指示を待ちます。
git rebase -iは絶対に使用しないでください。
3. Lint とテストを実行する
- プロジェクトで文書化されている Lint とテストのエントリーポイントを優先します。
- Lint を実行してからテストを実行します。どちらかが失敗した場合は直ちに停止し、fast-forward してはいけません。
- プロジェクトでチェック方法として明示されていない限り、本番用のビルド全体を実行してはいけません。
4. main を fast-forward する
通常、main は別のワークツリーでチェックアウトされているため、ここで git checkout main を実行してはいけません。
Lint とテストの成功後に限り、次の手順を実行します。
mainがあるワークツリーを確認します:git worktree list- 作業ブランチのワークツリーにとどまったまま、そのチェックアウトをこのブランチの先端に fast-forward します。
git -C <main-worktree-path> merge --ff-only <work-branch-tip>
<work-branch-tip> には作業ブランチ名またはその SHA を使用します。
--ff-onlyのみ使用します。FF ができない場合は停止して確認し、マージコミットを作成してはいけません。mainのワークツリーにローカル変更がある場合、マージは失敗するはずです。その場合は中止して報告してください。そこで変更を汚染するマージや stash を行ってはいけません。mainを含むワークツリーがない場合は、直接git push . HEAD:mainを実行できます。強制プッシュはしないでください。- 作業ブランチにとどまってください。ブランチを削除してはいけません。
5. 確認する
作業ブランチと main が同じコミットであることを確認します(例:git rev-parse HEAD と git -C <main-worktree-path> rev-parse HEAD)。ブランチ名、新しい main の先端(短縮 SHA とサブジェクト)、チェックが成功したことを簡潔に報告します。
厳守事項
- 対象はローカルの
mainのみです。リモートからの fetch/pull/push は行いません。 - ユーザーから明示的な依頼がない限り、コミット、amend、スカッシュ、その他の履歴の書き換えを行ってはいけません。
- ブランチを削除してはいけません。
- 作業ブランチで作業を終え、
mainを fast-forward して同じ状態にします。 - 進め方に迷った場合は、停止してユーザーの指示を待ちます。
コメント
Markdown 対応