86

设想:

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

吉特回应:

更新被拒绝,因为您当前分支的尖端位于其远程分支的后面。等等

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

(如果我拉动,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

4 回答 4

198

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

gitk HEAD @{u}

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

git push -f

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

于 2012-09-29T09:03:31.993 回答
6

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

尝试这个 :

git pull --rebase <url>

然后

git push -u origin master
于 2017-08-14T10:43:32.233 回答
4

当我尝试推送开发分支(我正在使用 git flow)时,这发生在我身上。有人将更新推送到大师。为了解决它,我做了:

git co master
git pull

哪个获取了这些更改。然后,

git co develop
git pull

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

于 2015-04-28T19:25:31.153 回答
0

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

但是要修复它,知道您是唯一更改它的人,请执行以下操作:
1 - 备份您的项目(我只做了 git,./src 文件夹中的文件)
2 - git pull
3 - 恢复您对许多“混乱”文件的备份(带合并指标)

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

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

于 2016-09-20T02:30:05.600 回答