254

我今天在尝试运行 Git垃圾收集时随机遇到了这个问题:

$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack

我该如何处理?

4

10 回答 10

278

我不明白这个的后果,但正如这个线程中所建议的,当我遇到这个时,我只是做了

$ mv .git/refs/remotes/origin/HEAD /tmp

(保留它以防万一)然后

$ git gc

无怨无悔地工作;我没有遇到任何问题。

于 2016-07-04T22:09:46.640 回答
134

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

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

git remote set-head origin --auto

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

于 2018-04-20T14:44:51.560 回答
110

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

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

ref: refs/remotes/origin/develop

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

ref: refs/remotes/origin/master

提示我的线索是运行git prune显示此错误:

> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD
于 2017-09-11T16:08:49.080 回答
56

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

fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack

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

cat .git/refs/remotes/origin/HEAD

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

git remote set-head origin --auto

其次是

git gc

会修复它

于 2021-04-19T13:15:08.600 回答
27

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

$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
$ git fetch --prune
$ git gc

那应该解决它。

于 2020-03-16T21:57:16.757 回答
5
git update-ref -d [wrong reference here]

这将解决此问题。

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

git update-ref -d 'refs/remotes/origin/HEAD'

如果您在使用 .git 时遇到如下错误:

error: bad ref for .git/logs/refs/remotes/origin/Dec/session-dynatrace-logs 6

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

git update-ref -d 'refs/remotes/origin/Dec/session-dynatrace-logs 6'
于 2020-10-27T18:56:19.363 回答
2

我遇到此错误是因为默认分支已从更改mastermain. 我使用了上面一些答案给出的混合信息来解决它:

cat .git/refs/remotes/origin/HEAD

回来:

ref: refs/remotes/origin/master

为了修复它,我跑了:

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

我再次运行它以仔细检查:

cat .git/refs/remotes/origin/HEAD

哪个返回:

ref: refs/remotes/origin/main

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


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

git remote set-head origin --auto

哪个返回:

origin/HEAD set to main

它通过自动识别 ref 真正解决了这个问题。

于 2021-11-10T12:26:30.663 回答
1

对我来说,原因是在 Windows 的压缩文件夹中工作。当文件夹解压缩时,它损坏了包文件,引发了其他奇怪的问题,例如无法修剪不存在的分支。

唯一的解决方法是清除工作目录并再次克隆 repo 遥控器。幸运的是,我仍然可以推送和拉取更新以确保没有丢失任何内容。现在一切都很好。

于 2020-06-03T01:46:44.353 回答
1

我的问题发生在一个特定的分支上。
显然分支的参考文件已损坏。我就这样修好了。

git checkout main
// 我删除了文件 .git\refs\heads\branch_xpto
git pull
git checkout branch_xpto

于 2021-02-09T16:25:02.383 回答
0

如果您使用的是 git worktrees,请确保您正在执行

git worktree prune

跑步前

git gc

我的工作树损坏了,这似乎在删除损坏的工作树后起到了作用。git prune本身似乎不起作用。

于 2019-12-17T17:46:42.853 回答