从我们的中央服务器进入我的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)并寻找类似的错误,遗憾的是没有运气。
答案 0 :(得分:89)
我遇到了这个问题,我通过删除文件.git / ORIG_HEAD然后再次执行拉取来解决了这个问题。 .git / ORIG_HEAD文件是0字节而不是它应该包含的git引用,所以我就把它删除了。
答案 1 :(得分:9)
检查“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
的内容,如this issue。
如果这是某种类型的回购损坏(请参阅“Git corrupt master branch”),请先尝试再次克隆您的回购,然后在该回购之上重新应用您当前的修改(通过git format-patch
如果你需要)
答案 2 :(得分:8)
这个答案并没有解决OP的问题,但解决了类似问题。
我遇到了类似的问题(我得到了 error: cannot lock ref ... is at ... but expected ...
),但这是因为回购邮件中有两个分支具有相同的名称,但具有不同的情况。也许这个答案可以帮助那些到达这里的人,我无法在其他地方找到答案。
我删除了其中一个分支,然后从.git/ref/.../branch_name
中删除了相应的引用,然后git pull。这是因为我处理不区分大小写的文件系统,而两个分支被推送到区分大小写的文件系统上。
例如,两个分支是BRANCH1
和branch1
,它们都位于origin
远程。首先,删除其中一个分支,例如BRANCH1
。然后删除它的参考:
rm .git/refs/remotes/origin/BRANCH1
然后git pull
,它应该没问题。
答案 3 :(得分:1)
当您在存储库中git pull
时,会创建此文件,以便在同一存储库中不再git pull
,然后在进程完成时将其删除。如果进程死亡或变成僵尸,则不会删除该文件,您必须手动检查git进程是否仍然存在。如果该过程不存在,则您必须删除该文件并再次尝试git pull
。
答案 4 :(得分:0)
我必须删除 {
"extensionName": {
"message": "example.com — Datenschutz-Suchmaschine",
"description": "Name of the extension."
},
"extensionDescription": {
"message": "Hol dir deine Online-Privatsphäre zurück, mach domain.com zu deiner Suchmaschine.",
"description": "Description of the extension."
},
"extensionUrlLanguage": {
"message": "deutsch",
"description": "Search Engine Language"
},
"searchEngineName": {
"message": "example.com - Deutsch",
"description": "Search Engine Name"
}
}
,而不是.git/ORIG_HEAD.lock
。
答案 5 :(得分:0)
我遇到了Unix权限问题,我与两个不同的用户(一个是root
,另一个是我的私人用户)使用相同的git repo。
因此,我不得不将.git/ORIG_HEAD
上的文件所有权更改为个人用户,从而解决了该问题。
chown myuser:mygrp .git/ORIG_HEAD