git pull上的Git错误(无法更新本地引用)


115

我只有分支主管,每次尝试“ git pull”时我都会收到此错误:

error: Couldn't set refs/remotes/origin/master
From /var/lib/git/xxx/project
 ! a0f80ea..49177a3  master     -> origin/master  (unable to update local ref)

当我做“ git pull origin master”时,我得到:

error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

我一直在搜索,但找不到原因


2
本地存储库在哪里?您是否将其创建为与用于执行拉取的用户不同的用户?听起来像是文件权限问题。
tpg2114

是的,您说的很对,即您说项目文件的所有者是另一个用户,现在我的问题似乎很傻,但是您给了我答案,请选择一个最佳答案作为答复;)
user115561 2004年

请@ tpg2114将此添加为选择它的答案
user115561 2012年

Answers:


263

我和我的团队在SourceTree中进行提取时遇到了此错误,无法更新本地ref

我们用了 :

git gc --prune=now

这将删除所有应解决此问题的重复引用对象。

这里有一些链接,您可以在其中了解有关git引用和修剪的更多信息

git本周提示

git-prune文档

git参考


1
同样为我工作,同样的消息,Windows 7上的Sourcetree
James Westgate

2
刚开始也有这个问题。谢谢一群!工作完美!
ddrossi93

3
:可能需要这两个命令git gc --prune=now git remote prune originstackoverflow.com/questions/2998832/...
布莱恩

1
我尝试了git remote prune origin,但对我没有用。但是在那之后尝试了一下git gc --prune=now,它成功了!不确定,是否需要按此顺序或仅按此顺序。
阿努拉格

1
git此相关的另一个神秘问题导致了一个有用的简洁解决方案,对StackOverflow很有帮助。
约瑟夫

127

我解决如下:

git remote prune origin


6
尤里卡!确实有效。它与远程重命名的分支有关。我不会尝试解释它。
TheSoftwareJedi

8
这对我git gc --prune=now
Josh G

3
相同。这对我有用。git gc --prune = now不适用于我。
托尼

16

与gitbach line commande一起,用于git update-ref更新本地分支的引用:

$ git update-ref -d refs/remotes/origin/[locked branch name]

然后拉使用 $ git pull

[locked branch name] 是由于提交ID不匹配而发生错误的分支的名称。


13

尝试在git信息库根文件夹中使用此命令:

rm .git/logs/refs/remotes/origin/master 

Windows上的该文件夹在哪里?
Kolob峡谷

我找到了。这是您克隆到的任何目录
Kolob Canyon '18

12

我发现了同样的错误消息,试图从Bitbuck Repo提取到我的lokal副本中。也只有一个Branche Master,该命令git pull origin master导致此错误消息

From https://bitbucket.org/xxx
 * branch            master     -> FETCH_HEAD
error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

解决方法如下

  1. git reflog 查找最后一次提交的编号
  2. git reset --hard <numnber> 重置为最后一次提交
  3. git pull origin master 再无误拉

10

rm .git/refs/remotes/origin/master

它对我有用!


8

确保执行的git pull用户与创建资源库的用户相同。文件权限不正确。


对我来说,我不得不更改回购中文件的所有者,我试图用chown git pull in正确的用户。我认为这基本上是您在说的内容,尽管当我阅读此内容时对我来说并不明显。

我同意这一点,请检查所有者和组是否设置为愿意拉入“ .git”存储库的用户(如果您拉出的是“ root”分支,则会发生这种情况)是“ sudo chown -R”完成了我的任务。
jo_


2

这在我使用不区分大小写的文件系统的OSX上发生了。另一位开发人员以某种方式推了一个名称相同但大小写不同的分支:My-Branchvs my-branch

我执行拉取操作时,已经My-Branch签出并收到错误“无法更新本地引用”,可能是因为文件系统认为My-Branch== my-branch

由于我们使用Github,因此可以通过Github的GUI删除其中一个分支来解决问题。


就我而言,两个冲突的分支都属于另一个用户,因此我无法删除一个。取而代之的是,我删除了.git \ refs \ remotes下的分支引用文件,并对其进行了修复(暂时-每次我拉出该问题都会再次出现,直到另一个用户删除他的一个分支为止)。
Jana Mandic

我的问题还归因于本地分支机构和远程公司的大小写不同。使用上面的prune命令删除本地分支,然后从原点签出即可解决该问题
描述

1

如果您最近更改了密码,并且有一些将Windows和Linux登录信息集成在一起的东西,也会发生此错误(无法更新本地引用)。


1

从PC用户说起-重新启动。

老实说,它对我有用。我已经解决了两个我认为是腐败的奇怪git问题。


1

这可能是一个非常特殊的情况,但是:我在MacBook Pro的Parallels VM上运行Windows,并将本地存储库存储在VM的磁盘上,该磁盘与macOS共享。

如果我从Windows VM上的存储库中的Mac应用程序中打开了文件,有时会收到“无法更新本地引用”错误。发生这种情况时,解决方案是仅关闭文件或退出Mac应用程序。


1

这里发生了什么事?对远程分支的本地引用已更改,因此在运行git pull时git找不到任何相应的远程分支,因此失败。

git remote prune origin

实际上会清理此本地引用,然后运行 git pull再次。

建议-请--dry-run选择安全运行


0

由于磁盘已满,我在debian服务器上遇到了同样的问题。无法创建临时文件,因为设备上没有剩余空间。清除一些文件后,它工作正常。


0

这对我有用

rm .git/logs/refs/remotes/origin/master 

我怀疑这是否有用-甚至根本没有用。为了说服我,请添加一个解释,说明该方法应该如何工作,以及为什么它应该可以解决该问题。突出显示与现有其他答案看似相似的差异将是一个好处。尤其是巴巴克(Babak)投票赞成的人。
Yunnosch

0

我遇到了同样的错误,我正在Eclipse中进行更新,但出现了很多错误。因此,我尝试从DOS命令窗口进行更新,并遇到相同的问题。

然后,我尝试了解决方案“ git gc --prune = now”,该消息表明文件已锁定在refs目录中。

Eclipse必须已锁定“ refs”目录中的某些内容。
我发现的解决方案是简单地关闭Eclipse。然后,我使用“ git PULL”命令从DOS更新了存储库,一切正常。


0

删除文件.git / logs / refs / remotes / origin / [锁定的分支名称]


1
我怀疑这是否有用-甚至根本没有用。为了说服我,请添加一个解释,说明该方法应该如何工作,以及为什么它应该可以解决该问题。突出显示与现有其他答案看似相似的差异将是一个好处。尤其是巴巴克(Babak)投票赞成的人。
Yunnosch
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.