科技 · 实用指南
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。Git 的 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 可列出可达、不可达和悬空对象,但不是自动撤销按钮。
