Git说本地分支是远程分支的后面,但事实并非如此

时间:2012-09-29 05:41:30

标签: git git-push

场景:

  1. 我做了一个新的分支
  2. hack on it
  3. 承诺
  4. 推它
  5. 再坚持一下
  6. 再次提交
  7. 再试一次
  8. 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的直接延续。

4 个答案:

答案 0 :(得分:191)

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

gitk HEAD @{u}

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

git push -f

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

答案 1 :(得分:4)

当我试图推动开发分支时(我正在使用git flow),这发生在我身上。有人推动更新掌握。解决它我做了:

git co master
git pull

获取了这些更改。然后,

git co develop
git pull

哪个没做任何事。我认为尽管有错误信息,开发分支已经推出。现在一切都是最新的,没有错误。

答案 2 :(得分:3)

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

试试这个:

git pull --rebase <url>

然后

git push -u origin master

答案 3 :(得分:0)

要进行诊断,请按this answer

但要解决这个问题,知道你是唯一一个改变它的人,做: 1 - 备份你的项目(我只做git上的文件,。/ src文件夹)
2 - git pull
3 - 恢复你对许多&#34;混乱&#34;的备份。文件(带合并指标)

我试过git pull -s recursive -X ours但是没有按照我想要的方式工作,它可能是一个选项,但先备份!!!

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