libgit2返回:在TortoiseGit中找不到Refspec'refs/heads/origin/HEAD'错误

14 git tortoisegit libgit2

启动TortoiseGit时出现此错误:

错误对话框截图

无法得到所有裁判.
libgit2返回:未找到Refspec'refs/heads/origin/HEAD'

虽然烦人,但它并不妨碍我使用TortoiseGit.但是,我想让它消失,因为它很烦人.我该如何解决?

小智 24

更新的答案

事实证明,为了更新本地仓库<remote>/HEAD指向哪个分支的视图,你可以让git自动从远程获取该信息并在本地为你设置,而不必git symbolic-ref像我一样手动设置它.旧解决方案:

git remote set-head <remote> --auto

# Or shorter
git remote set-head <remote> -a
Run Code Online (Sandbox Code Playgroud)

请注意,此命令实际上不会更改远程repo本身的默认分支.为此,如果您有权访问它,您可能需要直接在远程仓库上使用git symbolic-ref.

老答案

错误消息引用的问题是,显然libgit2正在尝试读取指向的远程默认分支refs/remotes/origin/HEAD,但远程分支不存在,因此出错.

使用git branch -a,我的本地仓库认为这origin/develop是远程默认分支:

remotes/origin/HEAD -> origin/develop
Run Code Online (Sandbox Code Playgroud)

有一次origin/develop确实是我origin在GitHub上的回购中的默认分支,但它不再是master分支了.该develop分支已被删除,origin因为不再需要它.

所以我通过手动更新本地引用origin/HEAD以指向新的默认分支来修复此问题origin:

git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

或者,如果我还想在reflog中添加消息refs/remotes/origin/HEAD:

git symbolic-ref -m "Update to new remote default branch" \
refs/remotes/origin/HEAD refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题.也可以看看:

  1. 文档git symbolic-ref.
  2. Git:在裸存储库中更改Active Branch的正确方法?.
  3. 如何将Git远程HEAD更改为指向除"master"之外的其他内容.

  • +1我意外删除了origin/HEAD(是的,愚蠢!!!)并且可以通过你的回答恢复它!:) (2认同)