【问题标题】:Git to correct branch and worktree mismatchGit纠正分支和工作树不匹配
【发布时间】:2021-06-21 12:41:57
【问题描述】:

跟进'<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 worktree prune
  • 谢谢,但我在发帖之前尝试过git worktree prune。即,它对上述情况没有帮助。
  • 嗯,这表明 VS 正在执行git worktree lock。最新的 Git(现在是 2.31)可能正在进行改进,以使 git worktree list 显示有关它知道(或认为它知道)的工作树集的更多信息,这可能会有所帮助。不过目前还不确定这是什么状态。
  • 感谢 torek,我之前确实查过并尝试过git worktree list,但我丢失了输出(由于我的 Windows 机器被强制重启),但我认为不匹配并没有什么特别之处工作树,否则我会注意到并单独询问那条路线。不过我可能是错的(或者我的 git 不够新)。感谢您提供的信息,希望对下一个受害者有所帮助。
  • 我的问题是您如何设法更改您的一个工作树以检查您已经在另一个工作树中签出的分支。换句话说,当在/path/release-a 中签出release-b 时,为什么that 命令没有得到同样的错误信息?基本上,你不应该陷入这种境地。

标签: git git-branch git-worktree


【解决方案1】:

嗯,如果布局和你描述的一样,你应该可以在/path/release-a 中使用git switch release-a。您的问题是否反映了git worktree list 的输出,或者您在 MSVS 中看到的内容?

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

如果 MSVS 将元数据存储在其他地方,那就是另一个问题,大概只能在 MSVS 中解决。

【讨论】:

  • 哦,我不知道有git switchrelease-a 命令。暂时会接受它作为答案。谢谢!
猜你喜欢
  • 2019-06-19
  • 1970-01-01
  • 2022-01-19
  • 2012-03-05
  • 2022-10-24
  • 2016-10-06
  • 2018-01-11
  • 2017-02-14
  • 2017-12-28
相关资源
最近更新 更多