【问题标题】:Git says local branch is behind remote branch, but it's notGit说本地分支在远程分支之后,但事实并非如此
【发布时间】:2012-09-20 22:38:59
【问题描述】:

场景:

  1. 我新建了一个分支
  2. 破解它
  3. 提交
  4. 推一下
  5. 进一步破解
  6. 再次提交
  7. 再次尝试推送

Git 响应:

更新被拒绝,因为您当前分支的尖端落后 它的远程对应物。等等

我是唯一一个在这个分支上进行黑客攻击的人 - 没有其他人接触过它。远程分支实际上本地分支之后。我根本不用拉。

(如果我拉动,Git 会报告两者之间的冲突,并强制我将分支合并到自身中)

为什么(可能)会发生这种情况?我该如何诊断/修复它?

需要明确的是,我没有在任何地方分支,没有其他人正在处理它:

Remote: Commit A -------- Commit B  

Local:  Commit A -------- Commit B -------- Commit C  

C 是 B 的直线延续,不涉及分支。但是git认为C是A的一个分支:

Remote: Commit A -------- Commit B  

                  ------- Commit C  
                /  
Local:  Commit A -------- Commit B  

不是;它是 B 的直接延续。

【问题讨论】:

  • git remote -vgit show remote origin 的输出(假设来源是您遇到问题的遥控器)可能会有所帮助

标签: git git-push


【解决方案1】:

你可能重写了一些历史?您的本地分支与服务器上的分支不同。运行此命令以更好地了解发生了什么:

gitk HEAD @{u}

我强烈建议您尝试了解此错误的来源。要修复它,只需运行:

git push -f

-f 使其成为“强制推送”并覆盖服务器上的分支。当你在团队中工作时,这是非常危险的。但是 因为你是一个人,并确保你当地的状态是正确的 这应该没问题。如果不是这样,您可能会丢失提交历史记录。

【讨论】:

  • 就是这样。在第 2 步,我做了一个“修改上次提交”,然后推送,然后又破解了一些,然后再次尝试推送。我误解了 Amend 的工作方式。谢谢!
  • 这看起来真的很有用——但有人能解释一下'HEAD @{u}'的语法吗?
  • HEAD@{u} 均指提交。他们告诉 gitk,要显示哪些分支。 HEAD指当前签出的分支,@{u}HEAD@{u}的缩写,代表当前签出分支的上游分支。所以例如。 master,通常是origin/master
  • 有同样的情况 - 不得不重新扫描和合并冲突。使用gitk 帮助很大!
  • 如果我在本地进行许多简单的提交(不是修改)并尝试推送,就会发生这种情况。我知道没有其他人在 github 上进行更改。 Gitk 确实显示远程与本地不同,尽管这是意料之中的,但它应该将本地显示为比远程更新的版本,而不是将远程显示为 fork(看起来像那样,我不知道有多少 gitk 要告诉)
【解决方案2】:

这发生在我尝试推送开发分支时(我正在使用 git flow)。有人将更新推送到大师。我做了修复它:

git co master
git pull

获取了这些更改。那么,

git co develop
git pull

什么都没做。尽管出现错误消息,我认为开发分支已经推送。现在一切都是最新的,没有错误。

【讨论】:

    【解决方案3】:

    要诊断它,请关注this answer

    但要修复它,知道你是唯一改变它的人,这样做:
    1 - 备份您的项目(我只备份了 git、./src 文件夹中的文件)
    2 - git pull
    3 - 恢复您对许多“混乱”文件的备份(带有合并指示器)

    我尝试了git pull -s recursive -X ours,但没有按照我想要的方式工作,这可能是一种选择,但请先备份!!!

    确保没有差异/更改(在 git gui 上)。这是我的情况,根本没有什么可以合并的,但是github一直说我应该合并...

    【讨论】:

      【解决方案4】:

      解决方案非常简单,对我有用。

      试试这个:

      git pull --rebase <url>
      

      然后

      git push -u origin master
      

      【讨论】:

        猜你喜欢
        • 2011-05-02
        • 2014-03-06
        • 1970-01-01
        • 1970-01-01
        • 2015-10-19
        • 1970-01-01
        • 2020-04-04
        • 2012-01-02
        • 2019-02-16
        相关资源
        最近更新 更多