重新启动一个封闭的分支创建了两个头,如何推动它?

时间:2014-07-23 11:45:00

标签: mercurial

我创建了各种分支机构,因为它们无处可通。其中一个分支称为v2。它在过去的某个时间关闭了。

进一步发展时,我创建了另一个名为v2的分支。 Tortoise Hg警告我,这个分支已经存在,我是否愿意"重新启动它" "提交当前分支" 。我要求重新启动它。

v2(多次提交)上发生了更多开发,我决定推送到已经拥有我的项目的远程存储库(包括之前关闭的v2)。然后我收到消息

abort: push creates new remote head fce4441f5150 on branch 'v2'!
hint: merge or see "hg help push" for details about pushing new heads

我真的不想合并(我认为该消息意味着"将旧的v2与新的v2" 合并为)这些分支没有太多共同之处。我关闭了v2,而不是因为我不想再使用它了。 (关于重用名称的自我鞭打在问题的后面出现,不用担心)

这让我有了新的头脑。 hg outgoing向我展示了我期望发生的事情......

# this is the first commit for the new v2

changeset:   221:ba47b76010ef
branch:      v2
user:        w <w@home>
date:        Fri Jul 18 14:42:08 2014 +0200
summary:     New version: all frames are subclasses, frames are organiz

# some more commits for the new v2

# last commit for the new v2

changeset:   225:fce4441f5150
branch:      v2
tag:         tip
user:        w <w@home>
date:        Wed Jul 23 13:17:19 2014 +0200
summary:     added manualstart.sh

...但v2(旧的,已关闭)已存在于存储库中:

enter image description here

从现在开始我应该去哪儿?

  • 我应该强制在远程存储库上创建新头吗?我不喜欢--force参数,因为它在过去花了我很多诅咒。我想确保这次没关系。
  • 或其他什么?

总的来说,我了解到重用以前关闭的分支并不是一件好事,这是正确的吗?或者我可以采取一些预防措施吗?

2 个答案:

答案 0 :(得分:4)

你是对的,重用分支名称不是一件好事。

我看到了两种方法来实现你所需要的 - 没有一种方法真的很“好”。

1)您已经提到了-f选项。 如果您害怕推动多个头,请尝试按下步骤:

hg push -r <close commit of old branch>
hg push -r <parent of 221>
hg push -f -r 221 --new-branch
hg push

2)另一种选择是从旧分支到新分支进行No-Op-Merge。

hg update -C 221
hg merge v2
hg revert -a -r 221
hg commit -m "old is marked as commited"

但请注意,这可能会导致将来的合并出现问题,因为旧版v2中的所有更改都会标记为已合并,即使它们来自侧边或类似的。

答案 1 :(得分:1)

为了将来参考,另一种选择是将旧分支从完全剥离出来。因此,您可以毫无问题地推送新分支。

hg strip <start of old branch>

如果旧分支未将合并到任何内容,这是一个很好的选择。唯一不好的是你在所有克隆上都运行了命令。