如何处理git gc致命错误:坏对象refs/remotes/origin/HEAD错误:无法运行重新打包

Rya*_*yan 93 git

在尝试垃圾收集时,我今天随机点击列表.

$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack
Run Code Online (Sandbox Code Playgroud)

我该如何处理?

pet*_*arp 122

我不明白这个的后果,但正如在这个帖子中所建议的那样,当我遇到这个时,我就是这么做的

$ mv .git/refs/remotes/origin/HEAD /tmp
Run Code Online (Sandbox Code Playgroud)

(保持它以防万一)然后

$ git gc
Run Code Online (Sandbox Code Playgroud)

工作没有抱怨; 我没有遇到任何问题.

  • 它对我有用,我想我遇到了这个问题,因为我将默认分支从`master`更改为另一个名为`develop`的分支.在我将它从`develop`更改为`master`之前的几天和**我删除了旧的默认分支`develop`**,但在我的工作目录中,文件`.git/refs/remotes/origin/HEAD`是仍然指向不再存在的`refs/remotes/origin/develop`.**在这种情况下**删除文件确实有效. (4认同)
  • `git prune`对我有用,一种删除Git中积累的数据的方法,但没有被有用的东西引用. (4认同)
  • 我怀疑最好的方法是@WilQu 的回答(/sf/answers/3496100821/)。任何人都可以证实这一点吗? (3认同)
  • 在我的例子中,“git gc”将多个文件显示为“致命:坏对象...”。我将它们都移到了“/tmp”中。然后,“git gc”工作了,一切正常。 (2认同)

Tre*_*ton 52

我遇到的问题(这与上面评论中提到的@Stavarengo相同的问题)是默认的远程分支(develop在我的情况下)已被删除,但仍被引用.git/refs/remotes/origin/HEAD.

.git/refs/remotes/origin/HEAD在我的编辑器中打开显示:

ref: refs/remotes/origin/develop
Run Code Online (Sandbox Code Playgroud)

仔细地编辑它指向我的新默认分支,一切都很顺利:

ref: refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

让我知道的线索是运行git prune显示此错误:

> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD
Run Code Online (Sandbox Code Playgroud)


Con*_*sta 25

看起来您的符号引用可能已损坏...尝试将其替换为您的默认分支,如下所示:例如,我的默认分支是master

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

那应该解决它。

  • 我刚刚做了几乎这个并且成功了。这是我实际运行的`git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master; git fetch --修剪;git 修剪;git GC;` (2认同)

Rya*_*yan 24

我认为解决方案是以下,因为这似乎有效,但事实证明并没有真正解决问题.

git remote set-head origin --auto
Run Code Online (Sandbox Code Playgroud)

  • 等等,你刚才说你的答案是错的吗? (24认同)
  • Downvoting因为不是一个完整的答案,可能会产生误导. (3认同)

小智 23

感谢上帝,我找到了这个 https://makandracards.com/chris-4/54101-fixing-a-git-repo

fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack
Run Code Online (Sandbox Code Playgroud)

如果上游分支已被删除并且您的原点指向它,则可能会发生这种情况。您可以通过运行来确认这一点:

cat .git/refs/remotes/origin/HEAD

如果它指向一个不存在的分支,则运行:

git remote set-head origin --auto

其次是

git gc

会修复它

  • 非常有帮助,谢谢。这是将头分支从“master”切换到“main”时的常见问题,正如最近由于删除非包容性术语而在许多项目中看到的那样 (4认同)

Wil*_*lQu 22

在看到特伦顿的回答之后,我看着我.git/refs/remotes/origin/HEAD,看到它还指向一个现在被删除的旧分支.

但是我没有自己编辑文件,而是尝试了Ryan的解决方案:

git remote set-head origin --auto
Run Code Online (Sandbox Code Playgroud)

它会自动将文件设置为新分支,git gc之后工作正常.


Vir*_*ive 9

我遇到此错误是因为默认分支已从 更改mastermain。我使用了上面几个答案给出的混合信息来解决这个问题:

cat .git/refs/remotes/origin/HEAD
Run Code Online (Sandbox Code Playgroud)

回到:

ref: refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我跑了:

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

我再次运行这个来仔细检查:

cat .git/refs/remotes/origin/HEAD
Run Code Online (Sandbox Code Playgroud)

返回:

ref: refs/remotes/origin/main
Run Code Online (Sandbox Code Playgroud)

然后git gc工作git prune得很好。


为了看看会发生什么,我也尝试过:

git remote set-head origin --auto
Run Code Online (Sandbox Code Playgroud)

返回:

origin/HEAD set to main
Run Code Online (Sandbox Code Playgroud)

它通过自动识别引用真正解决了问题。


Jos*_*tus 8

git update-ref -d [wrong reference here]
Run Code Online (Sandbox Code Playgroud)

这将解决这个问题。

对于上述问题使用以下代码:

git update-ref -d 'refs/remotes/origin/HEAD'
Run Code Online (Sandbox Code Playgroud)

如果您在 .git 中遇到如下错误:

error: bad ref for .git/logs/refs/remotes/origin/Dec/session-dynatrace-logs 6
Run Code Online (Sandbox Code Playgroud)

您可以复制从 refs 开始的路径,如下所示:

git update-ref -d 'refs/remotes/origin/Dec/session-dynatrace-logs 6'
Run Code Online (Sandbox Code Playgroud)


小智 7

rm .git/refs/remotes/origin/HEAD

git gc
Run Code Online (Sandbox Code Playgroud)