科技 · 實用指南
Git worktree 路徑不見了?prune 前先 repair 或 lock
路徑缺失可能是移動、暫時離線或真正刪除。先保留每個 worktree 的 HEAD 與 index,再分類並選擇 repair、lock 或 prune。

linked worktree 的註冊路徑缺失是含義不明的狀態,不等於可以刪除中繼資料。相同現象可能來自目錄移動、共享磁碟離線或工作樹確實被棄用。
清理前先保存每個 worktree 的管理目錄和仍可存取的檔案。之後只走一條路:移動就修復、間歇儲存就鎖定、只有確認過時才 prune。
1. 任何清理前凍結證據
從健康工作樹執行 git worktree list --porcelain -z,保存 path、HEAD、branch、locked 與 prunable。解析共用 Git 目錄及受影響的管理目錄,記錄 gitdir、HEAD 與 index 雜湊,並在 Git 靜止時複製該目錄。
同時保存可存取的工作目錄與未追蹤檔案。分支尖端屬於共用歷史,但未暫存內容只在工作目錄,暫存狀態由該工作樹的 index 表示。dry-run 不是安全證明。
2. 為缺失路徑分類
目錄在別處就視為已移動;位於可攜裝置、網路共享或會消失的掛載上就視為暫時離線;只有負責人確認目錄及未提交工作不再需要,才判定真正刪除。
不要把 prune 當探索工具。Git 會刪除路徑缺失項目的管理資訊,錯誤的絕對反向指標也可能讓活工作樹在容器與主機邊界看似陳舊。
3. 修復移動路徑,鎖定間歇路徑
對移動的 linked worktree,向 repair 傳入新路徑,再比較新的 gitdir、HEAD 與分支。
對間歇儲存,在仍可存取時執行帶 reason 的 lock。locked 檔會阻止自動與手動 prune;路徑恢復且普通 Git 命令成功後再解鎖。
4. 用暫存狀態驗收修復
重新執行 status 與 git diff --cached,核對分支或 detached HEAD,並讀取一個普通 Git 物件。驗收前不要覆寫證據副本。
Git 2.51.1 夾具中,移動目錄使舊註冊被標記 prunable,dry-run 提議刪除;repair 保留了已暫存新檔。預先 lock 後模擬離線,dry-run 不再列出刪除候選。
5. 只 prune 已證實的陳舊註冊
確認工作樹真正過時後,先用 --dry-run --verbose,把每個候選與證據帳對應,再執行清理。路徑仍在時優先 worktree remove。
若已經 prune,停止繼續清理並保存工作檔、共用物件庫與 reflog。fsck 可列出可達、不可達與懸空物件,但不是自動復原。
