意想不到的新头创建

Unexpected new head created

我正在与 Hg 和 TortoiseHg 合作进行一个项目,每隔几天将其推送到 Bitbucket 上的一个远程仓库。当我今天尝试推送更改时,出现错误提示说我正在尝试创建一个新头像。我觉得这很奇怪,因为我绝对是唯一一个从事该项目的人,而且我在一台 PC 上工作。

我拉动查看远程仓库发生了什么,拉动本地仓库树后如下所示:

在 bitbucket 端,回购看起来像这样:

谁能帮我理解为什么只有我一个人在做这个项目,为什么我有两个头,为什么 Hg 不承认 Rev.40 和 Rev.36 是同一个修订版?

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

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

然而,这两个提交在回购的意义上相同 - 它们可能至少有一个小的时间差异(如果不是某些内容,例如白色 space) - 因此它们是独一无二的;只有你知道它们是如何形成的。

你可以试试这个(如果你想确定的话,可以在克隆回购上)

有一个干净的 workgin 目录

hg co 40
hg backout -r 40
hg merge 39
hg push

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

===

why I got two heads

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

How do I fix this now?

你在你的本地仓库上做了一个合并,摆脱了两个头,所以只有一个远程仓库不会抱怨它 如果你愿意,你可以 backout 修改前的提交是安全的(或者不是,如果你真的知道如何合并冲突使你的本地占上风) 但在这两种情况下,未修改的提交都会保留下来,因此它会出现在你的历史记录中,当心

If I strip 40 locally, what will happen when I try to push changes to the remote repo?

会在那里,除非你在那里删除它(直接在远程仓库上)

Will it strip the revision at the remote repo too?

不,不会