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

时间:2012-08-03 13:20:37

标签: git pull git-pull

完整消息:

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)

16 个答案:

答案 0 :(得分:197)

如果您在不区分大小写的文件系统(Windows或OS X)下运行git,则如果有两个具有相同名称但大小写不同的分支,则会发生这种情况,例如: user_model_changesUser_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)

更清晰的步骤

    终端

    中的
  1. cd /.git/refs/remotes/origin
    
  2. 执行ls,您会看到一些分支 HEAD

  3. 删除您认为存在问题的分支

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

    • 你可以拉扯
  5. 希望现在有效。

答案 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