with one click
worktree
Git worktree 生命週期管理 — 建立、列出狀態(含 PR 進度)、清理已 merge 的 worktree
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Git worktree 生命週期管理 — 建立、列出狀態(含 PR 進度)、清理已 merge 的 worktree
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
本 repo 自持 agent 定義目錄索引(complexity-triage / doc-reviewer / doc-updater / tdd-guide),供 design、update 等 skill 的 general-purpose subagent 呼叫時引用定義與檢查清單;本身非直接可呼叫的 skill,不會出現在指令清單中。
萬用助手 — 自動分析情境、盤點可用資源、智慧路由至最佳 agent/skill 組合,一鍵完成複雜工作流。
開發設計 — 自動盤點可用資源,透過 Plan agent 建立完整實作計畫,輸出至 plans/active/<slug>.md 供使用者確認後才進入實作。
更新知識庫 — 依序執行文件更新、審查、context 整理、pattern 提取,將本次 session 的變更沉澱為文件與知識。
貼上 Notion URL,自動抓取頁面需求內容,串接 /design 建立實作計畫。
產生跨 context 接手 prompt — 萃取本次對話的目標、進度、決策、未完成項目,輸出可直接貼到新 session 或 /compact 之後使用的自包含 prompt。
| name | worktree |
| description | Git worktree 生命週期管理 — 建立、列出狀態(含 PR 進度)、清理已 merge 的 worktree |
| allowed-tools | Bash, AskUserQuestion |
| argument-hint | ["status|create <name>|cleanup|prune"] |
管理 worktree 的建立、狀態查詢、清理。統一存放位置為 ~/Documents/<repo>-<name>。
從 $ARGUMENTS 判斷子指令:
| 輸入 | 子指令 |
|---|---|
(空)或 status | status |
create <name> | create |
cleanup | cleanup |
prune | prune |
所有子指令開始前,先取得 repo 資訊:
REPO_ROOT=$(git rev-parse --show-toplevel)
REPO_NAME=$(basename "$REPO_ROOT")
若不在 git repo 中,提示使用者切換到 git repo 目錄。
列出所有 worktree 及其狀態。
步驟:
git worktree list --porcelain 取得所有 worktree
排除 main worktree(即 REPO_ROOT 本身)
對每個 worktree:
gh pr list --head <branch> --state all --json number,state,mergedAt --limit 1 查 PR 狀態du -sh <path> 取得磁碟用量~/Documents/<repo>-* → 標準路徑(無標記).claude/worktrees/ → [legacy]/tmp/ 或 /private/tmp/ → [non-standard][non-standard]一致性檢查(manifest vs. 實際目錄的 set difference):
git worktree list 回傳的路徑,執行 test -d <path> 確認目錄實際存在[orphan],並在輸出最後顯示警告:
警告:偵測到 N 個孤立 worktree metadata(目錄已不存在但 git 仍有紀錄)
執行 `/worktree prune` 清理孤立 metadata。
輸出格式:
Repo: <repo-name> | Base: <current-branch> | N worktrees (+ main)
Path Branch PR State Disk
─────────────────────────────────────────────────────────────────────────────────────────────
~/Documents/<repo>-<name> worktree-<name> — no PR 196M
~/Documents/<repo>-<name2> feat/<name2> #1234 MERGED 1.8G
.claude/worktrees/<name3> worktree-<name3> #5678 OPEN 800M [legacy]
Tip: 有 MERGED/CLOSED 的 PR → `/worktree cleanup`
Tip 行只在有可清理 worktree 時顯示。
建立新 worktree。
步驟:
從 $ARGUMENTS 解析 name(create 後的部分)
計算路徑:~/Documents/<repo>-<name>
計算分支名:worktree-<name>
檢查路徑是否已存在(test -d)→ 已存在則提示並中止
檢查分支是否已存在(git branch --list)→ 已存在則提示並中止
使用 AskUserQuestion 詢問 base branch:
從哪個分支建立 worktree?
- (目前分支)
- master
- 其他(請指定)
建立 worktree:
git worktree add -b worktree-<name> ~/Documents/<repo>-<name> <base-branch>
輸出結果:
Worktree 已建立:
- 路徑:~/Documents/<repo>-<name>
- 分支:worktree-<name>
- Base:<base-branch>
開新 Claude Code session 在該目錄開發:
cd ~/Documents/<repo>-<name> && claude
自動偵測並清理已 merge/closed PR 的 worktree。
單一 repo(互動式):依下列步驟由 skill 執行;
跨 repo 批次:直接呼叫 scripts/worktree-cleanup.sh(dry-run 預設,--apply 才動作;--force-dirty 強制清髒目錄;--include-unknown 將 PR 狀態不明者也列入清理;--root 覆寫掃描根目錄)。
步驟:
git worktree list --porcelain 列出所有非 main worktree
對每個 worktree 判斷是否符合清理條件:
gh pr list --head <branch> --state all --json number,state,mergedAt --limit 1 查詢 PR 狀態gh 指令失敗(非零 exit code)或回傳空結果 → PR 狀態標記為 [unknown],不靜默跳過,仍列入清理候選並在表格中顯示 [unknown](依據:ITIL CMDB Reconciliation — 查詢失敗需明確標記,不得隱式忽略)[unknown] → 列入清理候選,表格標記 [unknown],讓使用者自行判斷git branch --merged <base> | grep <branch>)對符合條件的 worktree,檢查髒目錄:
git -C <path> status --porcelain 若有輸出 → 標記 [dirty] 並警告若無可清理的 worktree → 提示「沒有需要清理的 worktree」並結束
顯示清理清單,使用 AskUserQuestion 確認:
以下 worktree 符合清理條件:
Path Branch PR State Disk Note ~/Documents/- worktree- #1234 MERGED 800M .claude/worktrees/ worktree- — merged 200M [legacy] ~/Documents/- worktree- #5678 CLOSED 1.2G [dirty] ⚠️ 確認清理?(dirty worktree 將被跳過)
- 確認 — 清理上述 worktree(跳過 dirty)
- 全部清理 — 包含 dirty worktree(未 commit 變更將遺失)
- 取消
依使用者選擇執行:
git worktree remove <path>
git branch -d <branch> # 若分支已 merged
操作驗證(expected vs. actual count):
刪除後重新執行 git worktree list --porcelain,確認已刪除的路徑不再出現於列表
逐條對照清理清單(manifest):
| Path | 預期結果 | 實際結果 |
|---|---|---|
| ~/Documents/- | 已移除 | PASS / FAIL |
若任何路徑仍在列表中 → 輸出 [FAIL] 並提示手動執行 git worktree prune
報告結果:
已清理 N 個 worktree,回收 X 磁碟空間。
驗證:N/N 個 worktree 已從 git 列表移除。
清理孤立 worktree metadata(worktree 目錄已被手動刪除但 git 紀錄仍在)。
步驟:
git worktree list --porcelain 檢查每個 worktree 路徑是否存在git worktree prune