sync-worktreeslisted
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_