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

完整信息:

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) 

如果在不区分大小写的文件系统(Windows或OS X)下运行git,如果有两个名称相同但大小写不同的分支,例如user_model_changesUser_model_changes ,两个远程分支将匹配相同跟踪参考

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

永久修复

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

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

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

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

如果这不起作用,暂时的解决办法是:

还要注意,如果你不关心有问题的分支(例如,你只是想更新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 

只要删除“.git \ refs \ remotes \ origin”下的文件夹和文件即可。 工作时,你没有unpushed的变化

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

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

然后手动执行:

 git pull [remote_name] [branch_name] 

我能够拉动变化。

注意:我正在使用SourceTree ,无法执行此操作。

硬重置也将解决问题

 git reset --hard origin/master 

更清晰的步骤

  1. 在terminal

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

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

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

    • 你可以拉动

希望它现在有效。

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

注:我有一个在acme存储库中的子模块,acme有新的子模块更改(新提交),我需要首先做一个子模块更新与git submodule更新。

 [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,如果你的分支在原点之前。

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