Git 纠正分支和工作树不匹配

问题描述

跟进'<Branch>' is already checked out at '</other/location>' in git worktrees

当我的分支和工作树不匹配时,我收到“Branch is already checked out at different worktree错误

我现在必须使用 git worktree remove 删除我的 1.2T 工作树,但我想知道将来修复它的最佳方法是什么。

我的分支和工作树设置如下:

  • /path/master 对应我的 git master 分支
  • /path/release-a 对应我的 git release-a 分支
  • /path/release-b 对应我的 git release-b 分支

依此类推。多年来我一直这样,直到几天前我点击并更改了 MS VS 中的一个工作树分支错误。现在我的分支和工作树是这样的:

  • /path/release-a 正在使用我的 git release-b 分支
  • /path/release-b 正在使用我的 git release-b 分支

现在我无法在 MS VS 中将其改回。尝试在工作树中切换分支会让我:

fatal: '<branch>' is already checked out at '</other/location>'

请提供除 git worktree remove 以外的任何更好的方法

解决方法

嗯,如果布局如您所描述的那样,您应该能够在 git switch release-a/path/release-a。您的问题是否反映了 git worktree list 的输出,或者您在 MSVS 中看到的内容?

如果 .git 元数据混乱,您可以在两个工作树中创建虚拟分支(git checkout -b dummy-xdummy-y 等),然后在每个工作树中创建 git switch release-...。如果工作树中有未保存的工作,则根据需要提交/存储。

如果 MSVS 将元数据存储在别处,那是一个不同的问题,大概只能在 MSVS 中解决。