完整信息:
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
,一切都应该工作
同样的情况在这里,但没有关于评论发布它在我的情况下,我只有一个分支(主)并且只使用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。
git for-each-ref --format ='delete%(refname)'refs / original | git update-ref --stdin git reflog expire --expire = now --all git gc --prune = now
我知道这是旧的,但我有自己的解决方法。因为我正在使用源代码树,所以会发生此错误,因为有人创建了一个新分支。源树对此感到困惑。按下“远程分支拉”组合框旁边的“刷新”按钮后,似乎sourcetree已更新分支列表,现在我可以成功拉出。
我遇到了同样的问题,因为我已经重置为较旧的提交,即使我已经推送到远程分支。
我通过删除我的本地分支然后检查原始分支git checkout origin/my_branch
然后执行git checkout my_branch
解决了它
git update-ref -d
解决了我的错误实例,例如
git update-ref -d refs/remotes/origin/user
请注意,这不会影响远程。
在我的情况下,随后的git fetch
再次获取该分支,并且跟随git取/拉不再给出错误“远程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
下的文件夹和文件即可。当你没有未按下的更改时工作。
我跑这个来解决问题:
git gc --prune=now
逐个使用以下两个命令。
git gc --prune=now
git remote prune origin
这将解决您的问题。
我不得不从我的命令行删除我的分支:
.git\refs\remotes\{my remote}\{**my branch**}
然后手动执行:
git pull [remote_name] [branch_name]
我能够拉动变化。
注意:我使用的是SourceTree而无法完成拉动。
硬重置也可以解决问题
git reset --hard origin/master
更清晰的步骤
cd /.git/refs/remotes/origin
ls
,你会看到一些分支和HEADrm branchname
希望它现在有效。
试试这个,它对我有用。在您的终端:git remote prune origin
。