当git工作目录被删除时如何删除git工作树分支?

26

我已经删除了它的工作目录,因为这个 Git 工作树不再有用,然后我在主仓库的目录中使用了 git branch -D pubsub-sketch-tree。 一个错误被抛出:


error: Cannot delete branch 'pubsub-sketch-tree' checked out at '/Users/zhouhancheng/编程/github_own/sketch_worktree/pubsub-sketch_tree'  

但是'/Users/zhouhancheng/编程/github_own/sketch_worktree/pubsub-sketch_tree'已经被删除。


使用 Git 2.17(2018 年第二季度),git worktree remove 可以正常工作。请参见我的回答 - VonC
3个回答

32
您正在使用git worktree,因此答案在git worktree文档中:

当您完成链接的工作树时,可以直接删除它。仓库中工作树的管理文件(参见下面的“详情”)将最终自动删除(请参阅git-config(1)中的gc.worktreePruneExpire),或者您可以在主工作树或任何链接的工作树中运行git worktree prune来清理任何过期的管理文件。

(强调我的部分)。如果Git认为在辅助工作树中检出了该分支,则Git不会让您删除该分支。如果辅助工作树已被删除,但Git尚未意识到这一事实,只需运行git worktree prune即可告诉 Git去检查。


14
我已经移除了它的工作目录。
如果使用Git 2.17+(2018年第二季度),您将更轻松,因为“git worktree”已学习到“move”和“remove”子命令。{{}}

请查看commit 7f19def (2018年3月4日)由Eric Sunshine (sunshineco)提交的内容。
请查看commit ee6763a, commit cc73385, commit 78d986b, commit c64a8d2, commit 9f792bb, commit 9c620fc (2018年2月12日),以及commit 4ddddc1 (2018年1月24日)由Nguyễn Thái Ngọc Duy (pclouds)提交的内容。
(于2018年3月14日被Junio C Hamano -- gitster --合并至commit bd0f794)

worktree remove: 新命令

该命令允许删除工作树。与“move”命令相似,您不能删除主工作树或其中包含子模块的工作树。

对于删除$GIT_WORK_TREE,未跟踪的文件或任何已暂存的条目被认为是宝贵的,因此默认情况下防止删除。被忽略的文件不是宝贵的。


worktree remove: 允许在$GIT_WORK_TREE已经不存在时进行操作

git worktree remove基本上包含两个步骤:

  • 删除 $GIT_WORK_TREE
  • 删除 $GIT_DIR (即$SUPER_GIT_DIR/worktrees/something)

如果由于某些原因$GIT_WORK_TREE已经不存在,我们应该能够通过删除$GIT_DIR来完成工作。


1
在我的情况下,这是因为正在进行一次变基。我切换到我想要删除的分支,然后中止变基,然后我就能够删除它了。
git branch {branch-to-delete}
git rebase --abort 
# or
git merge --abort

git branch main
git branch -D {branch-to-delete}

1
这可能不是他们想要的解决方案,但因为你的答案,我意识到我也有一个正在进行中的rebase,并解决了我遇到的问题。谢谢! - Norman Pleitez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接