Git说本地分支在远程分支后面,但事实并非如此
场景:
- 我做了一个新的分支
- 破解它
- 提交它
- 推它
- 黑客就更多了
- 再次提交
- 试着再次推
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