234

我只有分支大师,每次我尝试“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'.

我一直在寻找但找不到原因

4

25 回答 25

455

我和我的团队在拉入 SourceTree 时遇到了这个错误,无法更新本地 ref 。

2020 年更新:根据@Edward Yang 下面的回答,@bryan 对此答案的评论,以及这个问题/答案,您可能需要同时运行git gc --prune=nowgit remote prune origin。只运行前者一直对我有用,但根据 ppl 的回复,我认为两者都是解决错误的不同原因所必需的。

我们用了:

git gc --prune=now

这将删除任何应该解决问题的重复引用对象。

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

本周 git 提示

git-prune 文档

git 参考

于 2014-12-03T17:44:16.740 回答
230

我解决如下:

git remote prune origin

于 2015-07-28T08:40:19.013 回答
40

使用 gitbach line 命令,用于git update-ref更新本地分支的引用:

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

然后拉使用$ git pull

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

于 2020-03-09T12:29:46.250 回答
22

尝试在您的 git 存储库根文件夹中使用此命令:

rm .git/logs/refs/remotes/origin/master 
于 2018-08-23T19:36:15.110 回答
18

rm .git/refs/remotes/origin/master

它对我有用!

于 2018-08-06T03:37:12.587 回答
16

问题

Windows 用户经常会遇到这个问题

git pull 

给出错误:error: cannot lock ref unable to update local ref

原因

原因 a)有多个分支,其 名称从开头到任何斜线(或到结尾)仅在大写和小写上有所不同

Branch name clashing (upper/lower case)
#######################################

# Example 1)
#############################
feature/releasecandidate/fix123
feature/releaseCandidate/improveFeature789
------------------------
               ^
  Identical from beginning up to a slash (here the 2nd one)
  except for the marked letter, where the upper/lower case differs




# Example 2)
#############################
releaseBranch
releasebranch
-------------
       ^
  Identical from beginning to the end
  except for the marked letter

原因b) linux上的一个问题:一个分支是另一个分支的前缀,带有斜线边界

Prefix with slash-boundary
#######################################

# Example 1) - also a problem on linux
#############################
feature/release2021
feature/release2021/fixIssue07
                   ^
              slash boundary

# Example 2)
#############################
feature/release2022
feature/Release2022/fixIssue99
        ^          ^
  differing case   slash boundary
 (problem on 
   windows)

解决方案

消除原因(参见上面的确切原因)。

# inspect your branches, to see if you have the upper/lower case problem
git ls-remote --heads YOUR-GIT-URL

例如:创建一个分支命名策略,例如全部小写;或最后一个斜线之前的小写字母。或者一些智能钩子,可以检测违规行为。(但请注意:在原因 a)问题仅在 Windows 上,不在 linux 上)。

背景

问题是 Windows 将这些分支(来自示例 1 和 2)存储在.git文件夹中

# inspect the files/folders under
.git/refs/remotes/origin/

并且在原因 a) windows 无法区分大写/小写的差异,因此 git on window 变得疯狂。

原因 b)中,您不能拥有与文件 ( feature/release2021/) 同名的文件夹 (例如feature/release2021)。

解决方法

通常有效的短期解决方法(直到您消除了原因)是:

git pack-refs --all

# delete the contents of .git/refs/remotes/origin/*  
rm -rf .git/refs/remotes/origin/*

git pull; git pull; git pull   # all good? yes!
于 2021-03-27T14:08:05.330 回答
15

我发现尝试从 Bitbuck Repo 中提取相同的错误消息到我的本地副本中。也只有一个 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再次拉动没有错误
于 2014-04-25T11:46:09.610 回答
9

这对 Windows 来说已经足够了:

git pack-refs --all

于 2021-08-05T13:19:00.077 回答
9

直接回答

git remote prune origin
rm .git/refs/remotes/origin/master
git fetch
git pull origin master

一步一步运行上面的命令

于 2021-09-08T10:22:03.393 回答
8

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

于 2012-04-10T19:21:56.830 回答
6

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

git remote prune origin

实际上清理了这个本地引用,然后git pull再次运行。

建议 - 请使用--dry-run安全选项运行

于 2020-08-06T10:26:32.007 回答
5

对我有用的是:

git config --global fetch.prune true

现在它继续自动运行修剪。

于 2020-09-10T17:50:35.520 回答
4

我已经删除了分支的本地参考:

git branch -d -r REPO/.git/refs/remotes/origin/BRANCHNAME

然后我可以做我的取。

或者更彻底

rm -rf REPO/.git/refs/remotes/origin

这也每次都有效。

于 2021-03-18T11:07:09.533 回答
4

再次克隆存储库,并将 .git 文件夹复制到损坏的项目中。

于 2015-10-23T11:57:03.937 回答
3

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

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

于 2019-07-29T21:18:19.650 回答
2

这发生在我使用不区分大小写的文件系统的 OSX 上。不知何故,另一个开发人员推送了一个名称相同但大小写不同的分支:My-Branchvs my-branch.

My-Branch当我进行拉取时,我已经签出并收到错误“无法更新本地参考”,这可能是因为文件系统认为My-Branch== my-branch

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

于 2016-05-10T07:10:16.297 回答
2

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

于 2020-07-14T17:44:02.610 回答
1

如果您最近更改了密码并且有一些集成了您的 Windows 和 Linux 登录名的花哨的东西,也会发生此错误(无法更新本地参考)。

于 2013-01-16T23:21:20.273 回答
1

我通过删除锁定的分支文件来解决这个问题。它可能看起来很粗糙,我不知道它为什么会起作用,但它解决了我的问题(即你得到的同样的错误)

删除: .git/refs/remotes/origin/[locked branch name]

然后我就跑了

git fetch

并且 git 文件自行恢复,完全修复

于 2020-12-30T13:33:53.680 回答
1

git pull origin <branch_name_you_are_currently_at>只会拉那个分支。它可能会或可能不会给您合并冲突。解决它们并提交它们。它对我有用。

于 2021-09-21T16:19:12.120 回答
1

来自 PC 用户的发言 - 重新启动。

老实说,它对我有用。我已经解决了两个奇怪的 git 问题,我认为这是这种方式的损坏。

于 2016-12-05T05:25:34.640 回答
1

我有同样的错误,我是从 Eclipse 中更新的,我遇到了很多错误。所以我尝试从 DOS 命令窗口更新,并遇到了同样的问题。

然后我尝试了解决方案“ git gc --prune=now ” 这给出了文件被锁定在 refs 目录中的消息。

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

于 2020-05-29T15:29:54.520 回答
0

一种命令解决方案 [适用于 Linux/bash 用户]

  1. 通过更改文件的所有权来更改权限。

sudo chown username -R .git

(将“用户名”替换为您的用户名)

如果文件的所有者是 sudo,则使用 sudo。

  1. 删除文件也可以解决问题。

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

于 2021-07-23T06:24:28.763 回答
0

由于磁盘已满,我在我的 debian 服务器上遇到了同样的问题。由于设备上没有剩余空间,因此无法创建临时文件。清理了一些文件后,效果很好。

于 2017-01-09T02:34:21.520 回答
0

这对我有用

rm .git/logs/refs/remotes/origin/master 
于 2020-05-28T19:23:40.060 回答