using-git-worktreeslisted
Install: claude install-skill shumingyang-opencode/superpowers-zh-tw
# 使用 Git Worktrees
## 總覽
確保工作在隔離的工作區中進行。優先使用你平台的原生 worktree 工具。只有在沒有原生工具可用時,才改用手動 git worktree。
**核心原則:** 先偵測現有的隔離狀態。再用原生工具。最後才回到 git。永遠不要對抗 harness。
**開始時宣告:** 「我正使用 using-git-worktrees 技能來設定隔離的工作區。」
## 第 0 步:偵測現有的隔離狀態
**在建立任何東西之前,檢查你是否已在隔離的工作區中。**
```bash
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
BRANCH=$(git branch --show-current)
```
**子模組防護:** `GIT_DIR != GIT_COMMON` 在 git 子模組內部也成立。在得出「已在 worktree 中」的結論之前,先確認你不位於子模組中:
```bash
# If this returns a path, you're in a submodule, not a worktree — treat as normal repo
git rev-parse --show-superproject-working-tree 2>/dev/null
```
**如果 `GIT_DIR != GIT_COMMON`(且不是子模組):** 你已在一個連結的 worktree 中。跳到第 2 步(專案設定)。不要再建立 worktree。
回報分支狀態:
- 在分支上:「已位於隔離工作區 `<path>`,分支 `<name>`。」
- Detached HEAD:「已位於隔離工作區 `<path>`(detached HEAD,外部管理)。完成時需建立分支。」
**如果 `GIT_DIR == GIT_COMMON`(或在子模組中):** 你位於一般的 repo checkout 中。
使用者是否已在你的指令中表明其 worktree 偏好?如果沒有,在建立 worktree 前先徵求同意:
> 「你要我設定一個隔離的 worktree 嗎?它會保護你目前的分支不受變更影響。」
尊重任何已宣告的偏好,不再詢問。如果使用者婉拒同意,就原地工作並跳到第 2 步。
## 第 1 步:建立隔離工作區
**你有兩種機制。依這個順序嘗試。**
### 1a. 原生 Worktree 工具(首選)
使用者已要求隔離工作區(第 0 步的同意)。你已有建立 worktree 的方式嗎?可能是名為 `EnterWorktree`、`WorktreeCreate` 的工具、`/worktree` 指令,或 `--worktree` 旗標。如果有,就使用它並跳到第 2 步。
原生工具會自動處理目錄位置、分支建立與清理。當你有原生工具卻用 `git worktree add`,會建立你的 harness 看不見也無法管理的幽靈狀態。
只有在沒有原生 worktree 工具可用時,才繼續到第 1b 步。
### 1b. Git Worktree 備援
**只有當第 1a 步不適用時才使用** —— 你沒有可用的原生 worktree 工具。手動用