288

完整留言:

error: Ref refs/remotes/origin/user is at 3636498c2ea7735fdcedc9af5ab3c8689e6abe77 but expected a21359c6cc2097c85775cde6a40105f4bd7100ec
From github.com:{github project url}
 ! a21359c..6273ffc  user -> origin/user  (unable to update local ref)
4

18 回答 18

271

如果您在不区分大小写的文件系统(Windows 或 OS X)下运行 git,如果有两个具有相同名称但大小写不同的分支,则会发生这种情况,例如user_model_changesUser_model_changes因为两个远程分支都将匹配相同的跟踪参考.

删除错误的远程分支(你不应该有仅因大小写而异的分支),然后git remote prune origin一切都应该工作

于 2012-08-22T09:15:48.433 回答
251

永久修复

git update-ref -d解决了我的这个错误实例,例如

git update-ref -d refs/remotes/origin/user

请注意,这不会影响远程。

在我的情况下,随后git fetch再次获取了该分支,并且在 git fetches/pulls 之后不再给出错误“remote ref is at but expected”。

如果这不起作用,则临时修复:

另请注意,如果您不关心相关分支(例如,您只想更新 master,而不是 origin/user),git pull解决方法是获取然后合并您关心的特定分支,例如

git fetch # may give an error for a particular branch, but other branches will still be successfully fetched
git merge origin/master
于 2014-12-29T19:21:40.153 回答
74

只需删除\.git\refs\remotes\origin. 工作,当你没有未推动的变化时。

于 2016-03-15T11:59:21.030 回答
67

一一使用以下两个命令。

git gc --prune=now

git remote prune origin

这将解决您的问题。

于 2018-08-03T09:50:33.057 回答
60

我运行它来解决问题:

git gc --prune=now
于 2018-02-16T16:28:49.070 回答
13

我不得不从我的命令行中删除我的分支:

.git\refs\remotes\{my remote}\{**my branch**}

然后手动执行:

git pull [remote_name] [branch_name]

我能够拉动更改。

注意:我使用的是SourceTree,无法进行拉取。

于 2016-03-31T02:08:02.480 回答
6

硬重置也可以解决问题

git reset --hard origin/master
于 2017-08-21T16:41:50.453 回答
5

不幸的是,像 prune 和 reset 或 push 这样的 GIT 命令对我不起作用。修剪工作一次,然后问题又回来了。

对我有用的永久解决方案是手动编辑 git 文件。只需转到项目的 .git 文件夹,然后在 Notepad++ 等文本编辑器中打开文件 packed-refs。然后导航到带有失败分支的行并将其 guid 更新为预期的。

如果你有这样的消息:

错误:无法锁定 ref 'refs/remotes/origin/feature/branch_xxx':位于 425ea23facf96f51f412441f41ad488fc098cf23 但预期为 383de86fed394ff1a1aeefc4a522d886adcecd79

然后在文件中找到带有refs/remotes/origin/feature/branch_xxx. 那里的向导将是预期的(第二个)一个 - 383de86fed394ff1a1aeefc4a522d886adcecd79。您需要将其更改为真正的(第一个)一个 - 425ea23facf96f51f412441f41ad488fc098cf23

重复其他失败的分支,你会很好地继续。有时在重新获取后,我不得不重复我之前已经“修复”过的相同分支。在重新获取 GIT 更新指南并为您提供最新的。

无论如何,这个问题不是一个表演障碍。分支列表得到更新。这是一个警告。

于 2019-12-18T21:20:26.943 回答
5

更清晰的步骤

  1. 在终端

    cd /.git/refs/remotes/origin
    
  2. ls,你会看到一些分支HEAD

  3. 删除你认为有问题的分支

    rm branchname
    
  4. 如果它不起作用,请删除所有分支/HEAD

    • 你可能想拉

希望它现在有效。

于 2017-07-10T18:49:50.913 回答
2

试试这个,它对我有用。在您的终端中:git remote prune origin.

于 2017-12-12T12:03:51.723 回答
1

git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin git reflog expire --expire=now --all git gc --prune=now

于 2017-11-06T20:21:36.240 回答
1

我遇到了同样的问题,因为即使我已经推送到远程分支,我也重置为较旧的提交。

我通过删除我的本地分支然后检查原始分支git checkout origin/my_branch然后执行来解决它git checkout my_branch

于 2019-02-04T14:37:31.027 回答
0

这里的情况相同,但没有任何关于评论的评论在我的情况下是正确的,我只有一个分支(主)并且只使用 Unix 文件系统,当我运行 git fetch --progress --prune origin 并且分支在前面时,这个错误随机发生或“起源/主人”。没有人可以提交,只有 1 个用户可以推送。

注意:我在 acme 存储库中有一个子模块,并且 acme 有新的子模块更改(新提交),我需要首先使用 git submodule update 进行子模块更新。

[2014-07-29 13:58:37] Payload POST received from Bitbucket
[2014-07-29 13:58:37] Exec: cd /var/www/html/acme
---------------------
[2014-07-29 13:58:37] Updating Git code for all branches
[2014-07-29 13:58:37] Exec: /usr/bin/git checkout --force master
[2014-07-29 13:58:37] Your branch is ahead of 'origin/master' by 1 commit.
[2014-07-29 13:58:37]   (use "git push" to publish your local commits)
[2014-07-29 13:58:37] Command returned some errors:
[2014-07-29 13:58:37] Already on 'master'
---------------------
[2014-07-29 13:58:37] Exec: /usr/bin/git fetch --progress --prune origin
[2014-07-29 13:58:39] Command returned some errors:
[2014-07-29 13:58:39] error: Ref refs/remotes/origin/master is at 8213a9906828322a3428f921381bd87f42ec7e2f but expected c8f9c00551dcd0b9386cd9123607843179981c91
[2014-07-29 13:58:39] From bitbucket.org:acme/acme
[2014-07-29 13:58:39]  ! c8f9c00..8213a99  master     -> origin/master  (unable to update local ref)
---------------------
[2014-07-29 13:58:39] Unable to fetch Git data

要解决这个问题(在我的情况下),如果您的分支在原点之前,只需运行第一个 git push 即可。

于 2014-07-30T06:50:34.173 回答
0

我尝试了多个选项,但没有一个选项对我有用。下面的命令对我有用。把它放在这里,如果它可以帮助人们以防其他选项不起作用。

git 拉 -p

于 2022-01-12T16:25:32.817 回答
0

我遇到了这个问题,我的解决方案如下:

步骤1:

  1. 请先运行此命令。

    git gc --Prune=now

第2步:

  1. 如果运行第 1 步命令后没有错误,请在终端中运行以下命令。

    git远程修剪起源

我希望这能解决你的问题。

于 2022-01-12T17:01:55.173 回答
0

我遇到了同样的问题,我刚刚删除了远程分支并从主分支创建了新分支,并将我的更改从旧功能分支合并到新功能分支。现在我尝试了拉取和推送请求,它对我有用

于 2021-01-29T15:57:01.517 回答
0

我知道这很旧,但我有自己的解决方法。因为我使用的是源代码树,所以发生此错误是因为有人创建了一个新分支。源代码树对此感到困惑。在我按下“要拉取的远程分支”组合框旁边的“刷新”按钮后,似乎sourcetree已经更新了分支列表,现在我可以成功拉取。

于 2018-09-25T09:00:14.967 回答
-2

在不断搜索之后,这是对我有用的解决方案,它需要取消设置/删除上游

git branch --unset-upstream
于 2020-03-04T13:36:43.533 回答