38

从我们的中央服务器拉入我的 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 )并寻找类似的错误,不幸的是没有运气。

4

6 回答 6

130

我遇到了这个问题,我通过删除文件 .git/ORIG_HEAD 然后再次拉取来解决它。.git/ORIG_HEAD 文件是 0 字节,而不是它应该包含的 git 引用,所以我把它去掉了。

于 2013-01-04T15:18:06.333 回答
10

检查git remote prune origingit gc --prune=nowgit pull失败”“无法解析引用”“无法更新本地引用”</a>”中提到的内容。

如果您有.git/rebase-merge,请考虑将其删除(如“git rebase并删除变基分支导致“交互式变基已启动”错误消息“)

还要检查 的内容.git/HEAD,如本期所示

如果这是某种 repo 损坏(请参阅“ Git 损坏的 master 分支”),请先尝试再次克隆您的 repo,然后在该 repo 之上重新应用您当前的修改(git format-patch如果需要的话)

于 2012-05-13T09:39:42.063 回答
8

这个答案不能解决 OP 的问题,但可以解决类似的问题。

我有一个类似的问题(我得到了error: cannot lock ref ... is at ... but expected ...),但这是因为 repo 中有两个名称相同但大小写不同的分支。也许这个答案可以帮助到达这里的人,我无法在其他地方找到答案。我删除了其中一个分支,然后从: 中删除了其对应的引用.git/ref/.../branch_name,然后 git 拉了。这是因为我在一个不区分大小写的文件系统上工作,而两个分支被推送到一个区分大小写的文件系统上。

比如这两个分支是BRANCH1and branch1,并且都在originremote 下。首先,删除其中一个分支,例如BRANCH1. 然后删除它的参考:

rm .git/refs/remotes/origin/BRANCH1

然后git pull,应该没问题。

于 2016-02-03T05:10:53.183 回答
3

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

于 2016-11-25T14:46:09.083 回答
1

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

于 2019-01-25T11:40:29.973 回答
0

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

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

chown myuser:mygrp .git/ORIG_HEAD
于 2019-03-26T08:32:18.153 回答