Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

Git 顯示分支已在另一個 worktree 檢出?prune 或強制前先證明所有者

列出所有關聯 worktree,保存未提交或未推送工作,再區分真實所有者、已移動、離線或缺少路徑,選擇 remove、repair、prune、游離檢出或新分支。

Git worktree 所有者台帳原創示意圖。
Watch at Ease 原創示意插畫:列出、檢查並分類已登記分支所有者。 Watch at Ease

Git 阻止同一分支同時在多個 worktree 檢出,因為兩個目錄都會移動同一分支引用。錯誤中的路徑是登記所有者證據,不是刪除許可。

先做 porcelain 清單並檢查指定目錄。prune 只處理工作目錄缺少的記錄;repair 用於移動後連結;remove 用於明確退役的 worktree。

1. 盤點已登記所有者

在任一健康 worktree 執行 git worktree list --porcelain,記錄路徑、HEAD、分支、鎖定理由與 prunable 標記。先解析錯誤精確路徑,不要直接改 .git/worktrees。

也記錄失敗命令並確認包裝工具是否已完成遠端動作。PR 可能已合併,只是本機清理被分支占用保護擋下。

2. 檢查指定路徑與工作

若目錄存在,執行 status 並檢查未包含於目標基線或遠端的提交。移除前保存補丁、未追蹤檔與提交 ID。

不要因名稱含 temp、agent 或 build 就判定安全。鎖定或舊目錄仍可能含未發布工作,或只是暫時離線。

3. 分類真實、移動、離線或缺少

真實所有者應繼續負責移動該分支。外部移動目錄要 repair;可攜或網路路徑可能刻意鎖定且暫時不可用。

只有證明目錄確實消失,而非未掛載、改名或命名空間不可見,才判為缺少。先以 git worktree prune --dry-run --verbose 預覽。

4. 只執行匹配處理

不再需要且乾淨的目錄使用 git worktree remove path;支援的搬移用 move,外部搬移後用 repair。

並行唯讀查看用 detached HEAD 或新分支,不覆蓋同一分支所有者。僅在證據說明會丟棄哪些髒或鎖定狀態後才 force。

5. 驗證唯一所有者與預期結果

重跑 porcelain 清單,確認分支只出現在預期所有者。只重試失敗的本機步驟,不重複已成功的遠端合併或推送。

最後檢查保留目錄的狀態與提交可達性。驗收記錄列出所有者路徑、分支引用、保存提交,以及變更屬於元資料、目錄或包裝工具。

區分真實、移動與缺少 worktree 處理的原創示意圖。
Watch at Ease 原創示意插畫:remove、repair 與 prune 處理不同狀態。 Watch at Ease