意外的新头创造了

时间:2017-05-18 09:40:12

标签: mercurial push bitbucket

我正在与Hg和TortoiseHg合作开发一个项目,并且每隔几天就会推送到Bitbucket的远程仓库。当我今天尝试推动更改时,我收到一条错误消息,说我正在尝试创建一个新头。我觉得这很奇怪,因为我绝对是唯一从事该项目的人,而且我在一台PC上工作。

我拉着看远程仓库上发生的事情,然后拉出当地的回购树就像这样:

Local Repo

在bitbucket结束时,repo看起来像这样:

Remote Repo

有人可以帮助我理解为什么我有两个脑袋,如果我是唯一一个参与该项目的人,以及为什么Hg没有认识到Rev.40和Rev.36是同一版本?

我现在如何解决这个问题?如果我在本地删除40,当我尝试将更改推送到远程仓库时会发生什么?它会剥离远程仓库的修订吗?

2 个答案:

答案 0 :(得分:0)

由于提交r40仅在本地存在,因此从本地存储库中删除它没有任何缺点 - 如果您确定它不包含您想要保留的更改。它当时不会传播到你的bitbucket repo。

然而,两个提交在回购意义上相同 - 它们可能至少有一点差异(如果不是某些内容,例如空格) - 因此它们是独特;只有你能说出它们是如何形成的。

答案 1 :(得分:0)

你可以尝试这个(如果你愿意,可以在克隆回购上)

拥有干净的工作目录

hg co 40
hg backout -r 40
hg merge 39
hg push
在修订之前,

版本40将是远程仓库中存在的版本 所以,你检查一下,你把它退出(把它倒在它上面)然后你合并你正在进行的工作(在39左边)并且根本不应该有合并冲突,因为所有的变化都是传入的 然后,当满意时,你推

===

  

为什么我有两个脑袋

这部分已经在评论中得到解决,你意识到你在推送后修改了提交,因此明显重复了它

  

我现在如何解决这个问题?

你在本地仓库进行合并,以摆脱两个头,所以只有一个远程回购不会抱怨它 如果你愿意,你可以backout修改前的提交是安全的(或者,如果你真的知道如何合并冲突,使你的当地占上风) 但在这两种情况下,未经修改的提交都会存活,因此它会出现在您的历史中,请注意

  

如果我在本地删除40,当我尝试将更改推送到远程仓库时会发生什么?

除非你把它剥离(直接在遥控器上),否则它会在那里

  

它会剥离远程仓库的修订吗?

不,它不会