Git致命错误:不良对象refs/heads 2/master。

8
在几个月没有处理静态网站后,我回来尝试从 GitHub 仓库拉取更改。随后出现了“fatal: bad object refs/heads 2/master”错误。
(base) ➜  github_repo git:(master) ✗ git pull
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 21 (delta 3), reused 3 (delta 3), pack-reused 18
Unpacking objects: 100% (21/21), 6.95 KiB | 790.00 KiB/s, done.
fatal: bad object refs/heads 2/master
error: https://github.com/asafmaman101/asafmaman101.github.io.git did not send all necessary objects

我在StackOverflow上尝试了一些类似问题的解决方案,并尝试更新了我的Mac上的Git版本,但都没有帮助。

我正在尝试防止删除本地副本并重新克隆存储库,因为我有一些不想丢失的本地更改。还有其他的想法吗?


运行 git ls-remote 命令以查看是否存在 refs/heads 2/master 引用。如果存在,则应将其删除。 - ElpieKay
嗨,有refs/heads/master但没有2/master。我想这可能是问题所在 - 我该如何解决? - A. Maman
请查看您的.git/refs目录。是否有一个heads和一个heads 2?如果是这样,那么这似乎是由Dropbox或iCloud完成的某些操作。您需要手动解决它,并停止将.git目录存储在云管理空间中。 - torek
2个回答

27

我曾遇到一个类似的问题,即在.git目录中的文件名后添加了后缀“ 2”。Git仓库位于被iCloud云盘同步的目录中,因此可以推断出iCloud在同步操作期间添加了该后缀。

最初我通过SourceTree中的晦涩错误消息遇到了这个问题。在命令行上运行git gc帮助我缩小了问题的范围:

> git gc
fatal: bad object refs/heads/1.2 2
fatal: failed to run repack

我通过删除“2”后缀来解决了这个问题:

> mv .git/refs/heads/1.2\ 2 .git/refs/heads/1.2

4
好的,对我有效。我想在我的情况下是Google Drive的问题。谢谢! - djokerndthief
9
我也试过了,谢谢!我用的是Mac电脑,所以按下cmd+shift+period来显示隐藏文件,然后只需导航到我的目录中隐藏的.git文件夹,进入其中并删除问题文件名末尾的"(1)"后缀即可。没错,在我这里也是Google Drive引起的问题。 - John Jacecko
今天我已经为类似的情况工作了两次。我认为iCloud出了问题。 - JoyGuilherme
在我的情况下,分支名称是develop_abc(2)。因此,您需要运行以下命令refs/head/develop_abc* .git/refs/heads/develop_abc。 - CauCuKien

9

为了详细说明@Robin的答案,以下是对我有效的方法:

首先,检查原始目录的内容。

ls -l .git/refs/remotes/origin

结果是 HEAD HEAD 2 ..

所以,我所做的就是使用以下方法删除了重复的HEAD 2文件

rm '.git/refs/remotes/origin/HEAD 2'

然后我使用以下命令获取远程分支:

git fetch

然后将本地分支设置为追踪远程分支。
git branch --set-upstream-to=origin/{YOUR_REMOTE_BRANCH}

就是这样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接