git pull error:错误:远程ref在但是预期

问题描述 投票:191回答:13

完整信息:

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)
git pull git-pull
13个回答
202
投票

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

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


0
投票

同样的情况在这里,但没有关于评论发布它在我的情况下,我只有一个分支(主)并且只使用Unix文件系统,当我运行git fetch --progress --prune origin并且分支领先时,这个错误随机发生或'起源/主人'。没有人可以提交,只有1个用户可以做推送。

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

[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。


0
投票

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


0
投票

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


0
投票

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

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


157
投票

Permanent Fix

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

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

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

在我的情况下,随后的git fetch再次获取该分支,并且跟随git取/拉不再给出错误“远程ref是在但预期”。

If that doesn't work, a temporary fix:

另请注意,如果您不关心相关分支(例如,您只想更新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

39
投票

只需删除\.git\refs\remotes\origin下的文件夹和文件即可。当你没有未按下的更改时工作。


34
投票

我跑这个来解决问题:

git gc --prune=now

18
投票

逐个使用以下两个命令。

git gc --prune=now

git remote prune origin

这将解决您的问题。


12
投票

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

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

然后手动执行:

git pull [remote_name] [branch_name]

我能够拉动变化。

注意:我使用的是SourceTree而无法完成拉动。


6
投票

硬重置也可以解决问题

git reset --hard origin/master

4
投票

更清晰的步骤

  1. 在终端 cd /.git/refs/remotes/origin
  2. ls,你会看到一些分支和HEAD
  3. 删除您认为有问题的分支 rm branchname
  4. 如果它不起作用,删除所有分支/ HEAD 你可能会拉扯

希望它现在有效。


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.