完整消息:
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)
答案 0 :(得分:197)
如果您在不区分大小写的文件系统(Windows或OS X)下运行git,则如果有两个具有相同名称但大小写不同的分支,则会发生这种情况,例如: user_model_changes
和User_model_changes
因为两个远程分支都将匹配相同的跟踪参考。
删除错误的远程分支(你不应该只有大小写不同的分支),然后git remote prune origin
,一切都应该工作
答案 1 :(得分:149)
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
答案 2 :(得分:36)
只需删除\.git\refs\remotes\origin
下的文件夹和文件即可。
工作,当你没有未经推迟的改变时。
答案 3 :(得分:28)
我跑这是为了解决问题:
showResults = () => {
return (
<div>
<p> {this.state.queryData.map((i, index) => index+1 + " :" + i)} </p>
</div>
)
}
答案 4 :(得分:15)
一一使用下面的两个命令。
git gc --prune=now
git remote prune origin
这将解决您的问题。
答案 5 :(得分:12)
我必须从命令行中删除分支:
.git\refs\remotes\{my remote}\{**my branch**}
然后手动执行:
git pull [remote_name] [branch_name]
我能够做出改变。
注意:我使用 SourceTree 并且无法完成拉动。
答案 6 :(得分:6)
硬重置也可以解决问题
git reset --hard origin/master
答案 7 :(得分:4)
更清晰的步骤
cd /.git/refs/remotes/origin
执行ls
,您会看到一些分支和 HEAD
删除您认为存在问题的分支
rm branchname
如果不起作用,请删除所有分支/ HEAD
希望现在有效。
答案 8 :(得分:1)
试试这个,它对我有用。
在您的终端中:git remote prune origin
。
答案 9 :(得分:1)
不幸的是,诸如修剪和重置或推送之类的GIT命令对我不起作用。 Prune工作一次,然后问题再次出现。
对我有用的永久解决方案是手动编辑git文件。只需转到项目的.git文件夹,然后在文本编辑器(如Notepad ++)中打开文件packed-refs。然后导航到具有失败分支的行,并将其guid更新为预期的行。
如果您收到以下消息:
“错误:无法锁定参考'refs / remotes / origin / feature / branch_xxx':位于425ea23facf96f51f412441f41ad488fc098cf23,但预期为383de86fed394ff1a1aeefc4a522d886adcecd79”
然后在文件中找到带有“ refs / remotes / origin / feature / branch_xxx”的行。引导将出现(第2个)预期的-383de86fed394ff1a1aeefc4a522d886adcecd79。您需要将其更改为实际的(第一个)-425ea23facf96f51f412441f41ad488fc098cf23。
为其他失败的分支重复,您将可以继续进行。有时,在重新获取后,我不得不对之前已经“修复”的相同分支重复。重新获取GIT更新指导后,会为您提供最新的指导。
无论如何,这不是一个秀场停止者。分支机构列表已更新。这是一个警告。
答案 10 :(得分: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。
答案 11 :(得分:0)
git for-each-ref --format ='delete%(refname)'refs / original | git update-ref --stdin git reflog expire --expire = now --all git gc --prune = now
答案 12 :(得分:0)
我知道这已经很老了,但是我有自己的解决方法。因为我使用的是源代码树,所以由于有人创建新分支而发生此错误。源代码树对此感到困惑。在按“要拉的远程分支”组合框旁边的“刷新”按钮后,看来sourcetree已经更新了分支列表,现在我可以成功提取了。
答案 13 :(得分:0)
我遇到了同样的问题,因为即使我已经推送到远程分支,我也重置为较旧的提交。
我通过删除本地分支,然后签出原始分支git checkout origin/my_branch
,然后执行git checkout my_branch
答案 14 :(得分:0)
我遇到了同样的问题,我只是删除了远程分支并从主分支创建了新分支,并将我的更改从旧功能分支合并到新功能分支。现在我尝试拉和推送请求,它对我有用
答案 15 :(得分:-1)
经过不断搜索,这是对我有用的解决方案,需要取消/删除上游
git branch --unset-upstream