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_changes
和User_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
更清晰的步骤
-
在terminal
cd /.git/refs/remotes/origin
-
做
ls
,你会看到一些分支和头 -
删除你认为有问题的分支
rm branchname
-
如果不起作用,请删除所有分支/ 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