Git拉错误:错误:远程引用是在但预期

完整的信息:

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)
177082 次浏览

如果你在一个不区分大小写的文件系统(Windows或OS X)下运行git,如果有两个具有相同名称但不同大写的分支,例如user_model_changesUser_model_changes,因为两个远程分支将匹配相同的跟踪引用,就会发生这种情况。

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

同样的情况在这里,但没有关于张贴的评论在我的情况下是正确的,我只有一个分支(master),只使用Unix文件系统,这个错误随机发生时,我运行git fetch -progress -修剪起源和分支是前方或'origin/master'。没有人可以提交,只有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 update-ref -d解决了此错误的实例,例如:

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

注意,这不会影响远程。

在我的例子中,后续的git fetch再次获取该分支,并且后续的git获取/提取不再给出错误“remote ref is at but expected”。

如果这不起作用,临时修复:

还要注意,如果你不关心所讨论的分支(例如,你只想更新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\refs\remotes\{my remote}\{**my branch**}

然后手动操作:

git pull [remote_name] [branch_name]

我找到了改动的地方。

注意:我正在使用SourceTree,无法进行拉取。

清晰的步骤

  1. < p >终端

    cd /.git/refs/remotes/origin
    
  2. do ls, you will see some branches and HEAD

  3. Remove the branch you think has the problem

    rm branchname
    
  4. If it did not work, delete all branches/HEAD

    • you may wana pull

Hope it works now.

硬重启也会解决这个问题

git reset --hard origin/master

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

试试这个,对我很管用。 在您的终端:git remote prune origin.

我运行这个来解决问题:

git gc --prune=now

依次使用下面两个命令。

git gc --prune=now


git remote prune origin

这将解决你的问题。

我知道这很旧了,但我有自己的办法。因为我使用的是源树,这个错误发生是因为有人创建了一个新的分支。源树对此感到困惑。在我按下“remote branch to pull”组合框旁边的“Refresh”按钮后,似乎sourcetree已经更新了分支列表,现在我可以成功拉起。

我也有同样的问题,因为我重置到一个旧的提交,即使我已经推送到远程分支。

我通过删除我的本地分支,然后签出原始分支git checkout origin/my_branch,然后执行git checkout my_branch来解决这个问题

不幸的是,GIT命令如修剪、重置或推送对我不起作用。修剪工作了一次,然后问题又回来了。

对我有效的永久解决方案是手动编辑git文件。只需转到项目的.git文件夹,然后在文本编辑器(如notepad++)中打开packd -refs文件。然后导航到失败的分支所在行,并将其guid更新为预期的guid。

如果你有这样的信息:

错误:不能锁定ref 'refs/remotes/origin/feature/branch_xxx':是在425ea23facf96f51f412441f41ad488fc098cf23,但预期383de86fed394ff1a1aeefc4a522d886adcecd79

然后在文件中找到带有refs/remotes/origin/feature/branch_xxx的行。这里的guid将是预期的(第二个)- 383de86fed394ff1a1aeefc4a522d886adcecd79。您需要将其更改为真正的(第一个)- 425ea23facf96f51f412441f41ad488fc098cf23

对其他失败的分支重复操作,您就可以继续了。有时在重新获取后,我不得不重复相同的分支,我已经“固定”之前。在重新获取时,GIT更新guids并给你最新的一个。

无论如何,这个问题不是一个节目的中止。分支列表得到更新。这是一个相当大的警告。

经过不断的搜索,这是对我有效的解决方案,需要清除/移除上游

git branch --unset-upstream

我也遇到了同样的问题,我只是删除了远程分支,并从master中创建了新的分支,并将我从旧功能分支到新功能分支的更改合并在一起。现在我尝试了拉和推的要求,它为我工作

我尝试了多种选择,但没有一个对我有效。下面的命令对我很有用。把它放在这里,如果它能帮助人们,以防其他选择不起作用。

Git拉-p

我遇到过这个问题,我的解决方案如下:

步骤1:

  1. 请先执行该命令。

    git gc—Prune=现在

步骤2:

  1. 如果执行第1步命令后没有错误,则在您的终端上执行以下命令。

    git远程删除源文件

我希望这能解决你的问题。

我无法从我的Git回购,并得到相同的错误如上所述。在我的例子中,我执行的步骤是右键单击项目文件夹->点击设置->点击Remote ->点击删除按钮->提供配置详细信息Remote: "origin"URL:““在此设置页面。→然后点击'Add New/Save'按钮>点击ok。

经过上述更改,我能够成功地拉/取我想要的分支。

请按照如下顺序执行以下命令

git gc --prune=now
git remote prune origin
git pull