即使删除了工作树并运行了工作树修剪,仍无法检出分支

49

我使用以下命令为分支创建一个工作树:

Git add worktree <path> <branch-name>

这为我创建了一个新的工作树,并在路径处检出了分支。

现在我想删除/移除这个工作树。运行以下命令:

rm -rf <path>
git worktree prune

理想情况下,这应该会删除工作树并删除该路径的引用。因此,现在我应该能够检出该分支。但当我运行以下命令以检出该分支时:

git checkout <branch-name>

我遇到了这个错误:

fatal: '<branch-name>' is already checked out at ''

有人能帮我解释一下正在发生的事情吗。


我正在使用最新版本,我认为那是2.5。 - Randeep Singh
git --version 返回什么?2.5 不是最新版本。 - VonC
这是:git版本2.6.1.windows.1 - Randeep Singh
好的,我会检查一下是否有Git 2.7的待处理修复。 - VonC
你运行了 git work prune 还是 git worktree prune - Gonfva
显示剩余2条评论
4个回答

50

我解决了这个问题,方法是从仓库目录中删除.git/worktrees/<分支名称>.


当使用 git worktree 时,我已经多次添加了相同的名称。第一次我得到的引用与目录名称相同。但是第二次,因为引用已经存在,我会看到一个带有后缀“1”的引用。我想知道删除目录是否可以解决带有“1”后缀的引用?这个解决方案对我有所帮助,通过清除命名不一致性来解决问题。 - Ben Simpson
当然,您可以通过删除工作树来解决此问题。但这并不是回答以下问题的方法:为什么不能在两个工作树中检出相同的分支。 - LoKi
6
我认为原问题是:为什么git prune没有按预期删除工作树管理文件?我不知道那个问题的答案,但我回答了含义上的问题:一旦我的存储库处于那种状态,我如何检出分支的新副本?此外,您可以使用git worktree add -f ...在两个工作树中检出相同的分支。 - msteed

10

我认为正确的命令是:

git worktree prune

0

Git 有时候就像情绪化的小孩一样,但对我有用的是首先在 Git Bash 上使用以下命令检查哪些工作树仍处于活动状态:

git worktree list

然后你会看到所有的工作树和你的问题儿子,当你看到它时,请查看保存的分支名称,因为它们包括您目录的完整地址。复制整个分支名称并粘贴或手动输入给那个人。

git worktree remove <FullBranchName>  (e.g C:/temp/foldername)

-5
一个快速的解决方法是,在所有相关分支和代码都在github上的情况下。删除完整的git项目目录。
然后再次从github克隆它,运行git clone <github-project> 提示:获取远程git分支的最新版本以加快速度。

那需花费数小时,因为我们项目的历史记录十分庞大。 - Randeep Singh
2
为了保险起见,请确保重新启动三次 ;-) - Jeffrey Aguilera
你好,IT,您尝试过关闭并重新启动它吗? - miken32

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