TortoiseGit中出现了"libgit2返回:Refspec 'refs/heads/origin/HEAD'未找到"的错误。

15
当我启动TortoiseGit时,遇到了一个错误:
无法获取所有引用。
libgit2返回:Refspec 'refs/heads/origin/HEAD'未找到。
尽管这很烦人,但它并不妨碍我使用TortoiseGit。然而,我希望让它消失,因为它很烦人。我该怎么办?

在将我的Github仓库从Github流程更改为git-flow时,我遇到了这个问题。我将'develop'分支设置为我的新默认分支,并删除了master分支。接受的答案解决了这个问题。 - angularsen
已创建错误报告:https://gitlab.com/tortoisegit/tortoisegit/issues/2926 - Charlie
1个回答

25

更新的答案

事实证明,为了更新本地仓库对于远程分支 <remote>/HEAD 指向的视图,你可以让 Git 自动从远程获取这些信息并在本地设置,而不是像我之前的解决方案那样手动使用 git symbolic-ref 来设置:

git remote set-head <remote> --auto

# Or shorter
git remote set-head <remote> -a

请注意,这个命令并不实际改变远程存储库本身的默认分支。如果需要更改远程存储库的默认分支,可能需要直接在远程存储库上使用git symbolic-ref命令(如果您有访问权限)。

旧回答

错误信息提到的问题是,显然libgit2正在尝试读取由refs/remotes/origin/HEAD指向的远程默认分支,但远程分支不存在,因此出现错误。

使用git branch -a命令,我本地的repo认为origin/develop是远程默认分支:

remotes/origin/HEAD -> origin/develop

在某一时刻,origin/develop 确实是我在 GitHub 上 origin 仓库中的默认分支,但现在不再是了,master 分支成为了默认分支。由于不再需要 develop 分支,它已经从 origin 中被删除。

因此,我通过手动更新本地引用 origin/HEAD,将其指向 origin 的新默认分支来解决这个问题:

git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master

或者,如果我还想在refs/remotes/origin/HEAD的引用日志中添加一条消息:

git symbolic-ref -m "Update to new remote default branch" \
refs/remotes/origin/HEAD refs/remotes/origin/master

问题已得到解决。另请参见:

  1. 关于 git symbolic-ref 的文档
  2. Git:更改裸仓库中活动分支的正确方法?
  3. 如何将 Git 远程 HEAD 指向除“master”以外的其他内容?

2
+1 我不小心删除了 origin/HEAD(是的,很愚蠢!),但幸好通过你的回答成功恢复了它! :) - Friederike
谢谢。由于存在“多个远程HEAD分支”,我不得不使用git remote set-head origin production - Răzvan Flavius Panda

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