worktree remove 是什么
git worktree remove 删除一个关联工作区:清掉工作区目录,并同步移除 .git/worktrees 下的登记信息,一步到位。直接手工删目录会留下「已登记但目录缺失」的失效状态,git worktree list 会显示 prunable,之后对同名路径再执行 add 会被拒绝;remove 从根上没有这类残留。工作区要换位置时,标准做法是先 remove 再在新路径 add,而不是搬动目录。
基本信息
| 语法 | git worktree remove [-f] <路径>(remove 自 Git 2.17 起提供) |
|---|---|
| 前提 | 目标工作区没有未提交改动,否则直接拒绝 |
| 强制 | -f / --force 丢弃改动后删除 |
| 锁保护 | 被 lock 的工作区需要 remove -f -f 或先 unlock |
| 配套清理 | git worktree prune 清掉目录已消失的失效登记 |
| 核对 | git worktree list 查看工作区及 locked / prunable 标记 |
典型使用场景
- 热修复收尾:hotfix 工作区合并完成后删除,回到单工作区状态
- 临时任务清理:为评审或演示开的工作区用完即删,避免长期堆积
- 磁盘吃紧:批量检查旧工作区后删除不再需要的那些
- 流水线收尾:CI 脚本在任务结束时 remove 自建工作区,防止残留
- 事故修复:目录被误删后先 prune 清登记,同名路径才能重新 add
- 位置调整:工作区要挪到别的盘或目录时,remove 后在新位置 add
常用示例
常用示例
git worktree list # 列出全部工作区,注意 locked / prunable 标记
git -C ../hotfix status --short # 删除前确认没有未提交改动
git worktree remove ../hotfix # 常规删除:目录与登记信息一起清理
git worktree remove --force ../hotfix # 有未提交改动时强制删除(改动会被丢弃)
git worktree unlock ../hotfix # 被锁定的工作区先解锁(或 remove -f -f 强删)
git worktree prune # 目录已被手工删除时,清理失效登记
git worktree add ../hotfix-new hotfix # 换位置:先删再在新路径重建常见情况与处理
| 情况 | 处理 | 说明 |
|---|---|---|
| 有未提交改动 | 先提交或 --force | 报错 contains modified or untracked files |
| 工作区被 lock | unlock 或 remove -f -f | 单次 -f 不足以删除被锁工作区 |
| 目录已手工删除 | git worktree prune | list 中显示 prunable 标记 |
| 同名路径要重新 add | prune 或 add -f | 提示 missing but already registered |
| 主工作区 | 不能删除 | 报 is a main working tree,remove 只针对关联工作区 |
--force 会丢弃工作区里的未提交改动,执行前先用 git -C <路径> status 确认;改动有保留价值就先 commit 或 stash,再删除。
删除工作区不会删除分支:分支仍指向原来的提交,需要清理时用 git branch -d 单独处理,别以为删了工作区分支就没了。
旧版本兼容:Git 2.17 之前没有 remove 子命令,只能手工删目录再 prune,为老环境写的脚本要留兼容分支。