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

WoJ*_*WoJ 5 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
Run Code Online (Sandbox Code Playgroud)

我真的不想合并(我假设消息的意思是"将旧的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
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

  • 我应该强制在远程存储库上创建新头吗?我不喜欢这个--force参数,因为它让我在过去花了很多咒骂.我想确保这次没问题.
  • 或者是其他东西?

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

Har*_*ded 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
Run Code Online (Sandbox Code Playgroud)

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

hg update -C 221
hg merge v2
hg revert -a -r 221
hg commit -m "old is marked as commited"
Run Code Online (Sandbox Code Playgroud)

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