Git说本地分支在远程分支之后,但它';不是
情景:Git说本地分支在远程分支之后,但它';不是,git,git-push,Git,Git Push,情景: 我开设了一个新分支 点击它 提交它 推它 再来点 再次提交 再次尝试推送 Git回应说: 更新被拒绝,因为当前分支的尖端已过期 它的遥远的对应物。等等 我是唯一一个侵入这根树枝的人——没有其他人碰它。远程分支实际上位于本地分支的后面。我根本不需要拉 (如果我确实拉,Git会报告两者之间的冲突,并强制我将分支合并到自身中) 为什么会发生这种情况?我如何诊断/修复它 明确地说,我没有在任何地方分支,也没有其他人在进行分支: Remote: Commit A -------- Commit B
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}
我强烈建议您尝试了解此错误的来源。要修复此问题,只需运行:
git push -f
使用-f
使其成为“强制推送”,并覆盖服务器上的分支。在团队中工作时,这是非常危险的。但是
因为你是一个人,并且确信你所在的州是正确的
这应该没问题。如果不是这样的话,您可能会丢失提交历史记录。这发生在我尝试推动开发分支时(我使用的是git flow)。有人向master推送更新。为了解决这个问题,我做了:
git co master
git pull
它获取了这些更改。那么
git co develop
git pull
什么都没做。尽管有错误消息,我认为development分支已经启动了。现在一切都是最新的,没有错误。要进行诊断,请遵循
但要解决它,知道你是唯一一个改变它的人,请执行:1-备份您的项目(我只备份了git上的文件,./src文件夹)
2-
git pull
3-恢复对许多“混乱”文件的备份(带有合并指示器) 我尝试了
git pull-s recursive-X ours
但是没有按照我想要的方式工作,这可能是一个选项,但是首先备份
确保差异/更改(在git gui上)为零。这是我的情况,根本没有什么可合并的,但github一直说我应该合并…解决方案非常简单,对我来说很有效 试试这个:
git pull --rebase <url>
git remote-v
和git show remote origin
(假设origin是您遇到问题的遥控器)的输出可能会有所帮助,就是这样。在第二步,我做了一个“修正最后一次提交”,然后推,然后再黑一些,然后再次尝试推。我误解了修正案的工作方式。谢谢这似乎真的很有用-但是有人能解释一下“HEAD{u}”语法吗?HEAD
和{u}
都指提交。他们告诉gitk要显示哪些分支HEAD
指当前签出的分支,@{u}
是HEAD{u}
的缩写,表示当前签出分支的上游分支。因此,例如,master
,通常是origin/master
。具有相同的场景-必须重新扫描并合并冲突。使用gitk
帮助很大!如果我在本地(不是ammend)进行许多简单的提交并尝试推送,就会发生这种情况。我知道没有其他人在github上改变事情。Gitk确实显示远程与本地不同,尽管它是预期的,但它应该显示本地为比远程更新的版本,而不是远程为分叉(看起来像这样,我不知道Gitk有多少要说)
git push -u origin master