无法pull,git无法解析引用ORIG_HEAD

63

从我们的中央服务器pull到我的git仓库时,出现了这个错误:

$ git pull origin master

From http://aaa/repo
 * branch            master     -> FETCH_HEAD
error: unable to resolve reference ORIG_HEAD: No such file or directory
fatal: Cannot lock the ref 'ORIG_HEAD'.

我尝试过使用git gc(带有--prune = now选项),并寻找类似的错误,但不幸的是没有成功。


也许您可以考虑将Brian的问题标记为正确答案,因为它有更多的投票? - Simon East
6个回答

179

我曾经遇到过这个问题,通过删除文件.git/ORIG_HEAD并再次进行pull操作来解决它。.git/ORIG_HEAD文件的大小为0字节,而不是应该包含的git引用,因此我将其删除了。


这个问题的原因有什么想法吗? - earthmeLon
@earthmeLon 我不确定。可能是文件系统问题。 - Brian Minton
删除这个也修复了每次推送/拉取时烦人的密码提示。 - RayLoveless
4
我在 IntelliJ IDEA 崩溃后遇到了这个问题。 - jediz
4
在你的代码库目录中,查找名为".git"的隐藏文件夹。在其中可以找到"ORIG_HEAD"文件。 - Rishi Latchmepersad
显示剩余3条评论

10

请检查在 "git pull fails “unalble to resolve reference” “unable to update local ref”" 中提到的 git remote prune origin,并结合 git gc --prune=now 使用。

如果您有一个 .git/rebase-merge,请考虑删除它(如 "git rebase and deleted rebasing branches causing “Interactive rebase already started” error message" 所述)。

还要检查 .git/HEAD 的内容,如 此问题 所述。

如果这是某种类型的仓库损坏(参见 "Git corrupt master branch"),请尝试先克隆您的仓库,然后在该仓库上重新应用当前修改(通过 git format-patch 如果需要)。


1
谢谢,不幸的是,提到的修复方法都没有起作用,所以我不得不重新克隆并应用补丁。 - vvondra

9

这个回答并不能解决原帖的问题,但是可以解决类似的问题。

我曾经遇到过一个类似的问题(我得到了error: cannot lock ref ... is at ... but expected ...),因为代码库中有两个同名但大小写不同的分支。也许这个答案可以帮助到其他人,因为我在其他地方找不到答案。 我删除了其中一个分支,然后从.git/ref/.../branch_name删除了它对应的引用,然后使用git pull命令。这是由于我在不区分大小写的文件系统上工作,而这两个分支是在区分大小写的文件系统上推送的。

例如,这两个分支是BRANCH1branch1,它们都在origin远程下。首先,删除其中一个分支,比如BRANCH1。然后删除它的引用:

rm .git/refs/remotes/origin/BRANCH1

然后执行git pull,应该就没问题了。

7

我必须删除.git/ORIG_HEAD.lock,而不是(仅仅) .git/ORIG_HEAD


3

当您在存储库中执行 git pull 时,会创建此文件,以便一次不要在同一存储库中多次执行 git pull ,并且该文件将在过程完成时被删除。如果进程死亡或成为僵尸,则该文件不会被删除,您必须手动检查git进程是否仍然存在。如果进程不存在,则必须删除该文件并再次尝试 git pull


现在这就是我一直在寻找的答案。非常感谢你花时间解释这个问题背后的原因。 - ahmednawazbutt

0

我遇到了Unix权限问题,我使用同一个git仓库,但是用了两个不同的用户(一个是root,另一个是我的私人用户)。

因此,我必须将.git/ORIG_HEAD文件的所有权更改为我的个人用户,这解决了问题。

chown myuser:mygrp .git/ORIG_HEAD

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