我创建了各种分支机构,因为它们无处可通。其中一个分支称为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
(旧的,已关闭)已存在于存储库中:
从现在开始我应该去哪儿?
--force
参数,因为它在过去花了我很多诅咒。我想确保这次没关系。总的来说,我了解到重用以前关闭的分支并不是一件好事,这是正确的吗?或者我可以采取一些预防措施吗?
答案 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>
如果旧分支未将合并到任何内容,这是一个很好的选择。唯一不好的是你在所有克隆上都运行了命令。