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

场景:

  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的直接延续

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

 gitk HEAD @{u} 

我强烈build议你尝试了解这个错误来自哪里。 要解决这个问题,只需运行:

 git push -f 

-f使得它成为“强制推送”并覆盖服务器上的分支。 当你在团队中工作时,这是非常危险的。 但是,既然你是自己的,并确保你的地方状态是正确的,这应该没问题。 如果情况不是这样的话,你可能会失去承诺历史。

当我试图推动开发分支(我使用gitstream)时,发生了这种情况。 有人推动更新掌握。 解决它我做了:

 git co master git pull 

哪些取得了这些变化。 然后,

 git co develop git pull 

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

要诊断它,按照这个答案 。

但要解决它,知道你是唯一一个改变它,做:
1 – 备份你的项目(我只做了git,./src文件夹中的文件)
2 – git pull
3 – 恢复您在多个“杂乱”文件备份(与合并指标)

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

确保差异/变化(在git gui)是没有的。 这是我的情况,根本没有什么合并,但github总是说我应该合并…

解决scheme非常简单,为我工作。

尝试这个 :

 git pull --rebase <url> 

然后

 git push -u origin master