如何处理 git gc 致命:错误对象引用/远程/起源/HEAD 错误



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

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

我该如何处理?

我不

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

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

(保留它以防万一(然后

$ git gc

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

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

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

git remote set-head origin --auto

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

我遇到的问题(与@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

感谢上帝,我找到了这个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

会修复它

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

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

这应该可以解决它。

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'

我遇到了这个错误,因为默认分支已从 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 gcgit prune工作得很好。

<小时 />

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

git remote set-head origin --auto

其中返回:

origin/HEAD set to main

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

rm .git/refs/remotes/origin/HEAD

git gc

上述解决方案部分对我有用,因为我的文件夹在存储库中的所有位置都有"桌面.ini"文件,因为它托管在 Google 云端硬盘上,包括 Git 存储自己数据的".git"文件夹。Git 希望该文件夹中的每个文件都包含 Git 数据,而不是 Google Drive 数据,并且它试图解释桌面.ini文件内容时窒息了。为避免这种情况,请确保在.gitignore中包含desktop.ini

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

  1. 在存储库中创建一个"delete.bat"文件,并向其中添加以下代码

    del /s /q /f /a ".desktop.ini"

  2. 打开cmd并打开当前文件夹

  3. 只需在cmd中调用它即可运行delete.bat

现在你应该能够运行了 git remote set-head origin --auto

其次是git gc

如果有人收到此错误

fatal: bad object refs/stash 2
error: https://github.com/Username/repository.git did not send all necessary objects

这就是我修复的方式

mv .git/refs/stash 2 /tmp
git gc

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

git worktree prune

运行前

git gc

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

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

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

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

git 结帐主
我删除了文件.git\refs\heads\branch_xpto
git pull
Git 结帐branch_xpto

我遇到了同样的问题,当我尝试从源分支中提取时,出现以下错误:

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中删除

一切都很完美。

对我有用的是进入我电脑中的文件夹本身,因为我不断收到错误

No such file or directory

每当我跑步时

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

打开隐藏文件后,您可以通过按CMD + 移位 + .在 Mac 或 Windows 上,然后引用>远程>源并删除不必要的文件

在我的 我刚刚删除了那个特定的refsrefs/heads/feat/implement-games .在那之后,我已经能够git pull origin master<</p>

div class="one_answers">

我不太确定这是如何发生的,但似乎是由于重复引起的。

对我有用的是手动删除重复项。我导航到每个文件夹并手动删除重复项。

我有以下问题错误对象引用/标签/v1.0.1 2

  1. 在终端中打开存储库
  2. 使用 cd 命令导航到/标记
  3. 运行 ls 命令以验证副本是否存在,即 v1.0.1 2
  4. 运行 rm 命令删除重复的 -> rm v1.0.1\ 2(\ 处理空间(

然后再次尝试 git gc。就我而言,我在差异位置有更多重复项,我必须以相同的方式手动删除,但是一旦全部删除 - 一切都正常工作。

我希望这对你有用!

相关内容

最新更新