我今天在尝试运行Git垃圾收集时偶然发现了这个:

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

我该怎么处理呢?


我不理解这种情况的后果,但正如本文所述,当我遇到这种情况时,我就这么做了

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

(留着以防万一)然后

$ git gc

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


我遇到的问题(这与@Stavarengo在上面的评论中提到的问题相同)是默认的远程分支(在我的情况下是开发)已经被删除,但仍然在.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

在看到Trenton的答案后,我查看了我的.git/refs/remotes/origin/HEAD,发现它也指向一个旧的分支,现在已经删除了。

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

git remote set-head origin --auto

它会自动将文件设置为新的分支,git gc在那之后工作得很好。


如果您正在使用git工作树,请确保您正在执行

git worktree prune

在运行之前

git gc

我有一个工作树得到损坏,这似乎做的把戏后,删除损坏的工作树。Git修剪本身似乎不起作用。


看起来你的符号裁判可能坏了… 试着用你的默认分支替换它,就像这样: 例如,我的默认分支是master

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

这应该能解决问题。


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

唯一的修复方法是清除工作目录并再次克隆回购远程。幸运的是,我仍然可以推拉更新,以确保没有任何损失。现在一切都好了。


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

你可以从下面的引用开始复制路径:

git update-ref -d 'refs/remotes/origin/Dec/session-dynatrace-logs 6'

我的问题发生在一个特定的分支。 显然分支的参考文件被破坏了。我把它修好了。

Git checkout main //我删除了文件。git\refs\heads\branch_xpto git拉 Git签出branch_xpto


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

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

如果上游分支已经被移除,而您的原点指向它,则可能会发生这种情况。你可以通过运行:

猫参. / /遥控器/产地/头

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

Git远程set-head origin——auto

紧随其后的是

git gc

会解决的


我碰到了这个错误,因为默认分支从master更改为main。 我使用了上面几个答案给出的混合信息来解决它:

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

它通过自动识别引用来解决这个问题。


上面的解决方案部分适用于我,因为我的文件夹在存储库中到处都有“desktop.ini”文件,因为它托管在谷歌驱动器上,包括“desktop.ini”文件。git存储自己数据的文件夹。Git希望该文件夹中的每个文件都包含Git数据,而不是谷歌Drive数据,因此在试图解释desktop.ini文件内容时阻塞了。 为了避免这种情况,请确保在.gitignore中包含desktop.ini

我首先在windows上使用批处理命令删除这些文件,如下所示:

在存储库中创建一个“delete.bat”文件,并将以下代码添加到其中 Del /s /q /f /a ".\desktop.ini" 打开cmd,打开当前文件夹 运行delete.bat只需在CMD中调用它

现在你应该可以跑了 Git远程set-head origin——auto

后面跟着git gc


我遇到了同样的问题,当我试图从起源分支拉,我得到了以下错误:

fatal: bad object refs/remotes/origin/account

出于某种原因,上述解决方案对我来说并不管用。总是得到这个错误

mv: cannot stat '.git/refs/remotes/origin/HEAD': No such file or directory

运行git gc会给出这样的错误:

error: bad ref for .git/logs/refs/remotes/origin/account
fatal: bad object refs/remotes/origin/account
fatal: failed to run repack

在我的情况下,远程分支指向一个不存在的分支。

为我修复它的是删除分支

git branch -D account

同时从。git/refs/remotes/origin/account中删除

一切都很完美。


参rm . / /遥控器/产地/头

git gc