← ClaudeAtlas

sync-worktreeslisted

他の PR を main にマージした後、進行中の各 worktree に main を取り込む (merge) ワークフロー。並行している worktree が main から遅れるのを一括で 解消する。Trigger when the user says: "worktreeにmainを取り込む", "worktreeを最新化", "worktree同期", "mainを取り込む", "sync worktrees", "merge main into worktrees", "update worktrees with main", or similar phrases requesting to bring the default branch into in-flight worktrees.
kompiro/hane · ★ 0 · Code & Development · score 70
Install: claude install-skill kompiro/hane
# Sync Worktrees Skill 進行中の worktree(`.claude/worktrees/<branch>` など)に、マージ済みの最新 default ブランチ(通常 `main`)を **merge で取り込む**。複数の worktree を 並行で走らせていて、どれかの PR が main に入った後に残りを一括で追従させる ためのもの。 - **merge であって rebase ではない**。worktree のブランチは PR として公開されて いる前提なので、履歴を書き換える rebase ではなく merge で取り込む。 - **push はしない**。ローカル merge までで止める。push は pre-push hook / CI を 発火させるため、各 worktree での `pnpm i` 済み確認も含めてユーザーの判断に委ねる。 - **自動コンフリクト解決はしない**。衝突したらその worktree で止めて報告する。 ## 前提条件 - 対象リポジトリ内(いずれかの worktree、または main 本体)で実行されていること。 - リモート追跡が設定されていること(`origin`)。 ## 手順 ### 1. default ブランチを特定して fetch する 1. default ブランチ名を自動検出する: `git rev-parse --abbrev-ref origin/HEAD`(例: `origin/main` → `main`)。 取得できなければ `main`、無ければ `master` にフォールバックする。 2. 最新を取得する: `git fetch origin <default>`。 - 以降この `origin/<default>` を取り込み元として使う。 ### 2. 対象 worktree を列挙する 1. `git worktree list --porcelain` で全 worktree を取得する。 2. 各エントリについて、次を **対象から除外** する: - `bare` の worktree。 - `detached`(detached HEAD)の worktree — 追従先ブランチが無いため。 - ブランチが default ブランチそのものの worktree(main 本体は取り込み元なので対象外)。 3. 残った「feature ブランチを持つ worktree」が対象。 4. 引数でブランチ名 / worktree パスが渡された場合は、その 1 つだけに絞る (例: `/hane:sync-worktrees feat/key-generator`)。 ### 3. 各対象 worktree を順に処理する 各 worktree のパスを `<wt>` として、`cd` せず `git -C <wt> ...` で操作する。 1. **作業中・未コミットの保護(skip 判定)**。次のいずれかに当たる worktree は **merge せずスキップ**し、理由を控える: - 未コミットの変更がある: `git -C <wt> status --porcelain` が非空。 - 既に merge / rebase / cherry-pick が進行中: `<wt>` の git dir に `MERGE_