Mercurial:我可以重命名分支吗?


204

我们现在有一个“ stiging”分支,其中“ staging”似乎是更好的语义匹配。处理这个问题的好策略是什么?

Answers:


223

更新到该stiging分支并从中创建一个新分支。然后关闭旧分支。

综上所述:

hg update stiging
hg branch staging
hg commit -m"Changing stiging branch to staging."
hg update stiging
hg commit --close-branch -m"This was a typo; use staging instead."
hg push --new-branch

1
这是我发现的最佳方法。关闭分支可防止其他人意外使用它,因为它不会显示在“ hg分支”的输出中。如果您知道名字,它仍然允许您以后访问它。
器物

2
Mercurial会允许重用封闭分支的名称吗?即,如果您有一个v3分支,您是否可以使用上述技术将其重命名为v4,然后尽管保留了封闭的v3 ,也可以派生出一个新的 v3分支?
2012年

4
@ JoshuaGoldberg,3noch是错误的。如果使用,Mercurial 允许您重用封闭分支的名称--force。例如:hg branch --force v3。这将导致根据需要hg update v3更新到新v3分支。
吉利2014年

2
确认@Gili对hg help分支的评论:“-即使设置了现有分支,也要强制设置分支名称”
Joshua Goldberg 2014年

7
如果stiging在分支之前关闭,则不会“松动”
max.mustermann 2014年

60

对于未来的读者:通过rebase扩展,您可以创建一个具有相同父级的新分支,stiging并将整个分支历史记录移至该分支,如下所示:

hg update -r "parents(min(branch('stiging')))"
hg branch staging
hg commit
hg rebase --source "min(branch('stiging'))" --dest staging

假设stiging只有一个父母。当然,您可以只使用显式的修订号。

注1:如果分支stiging包括与其他部门合并,我认为这会保护他们,只要stagingstiging具有相同的父。但是我当然会仔细检查。

注意2:由于这会编辑历史记录,因此旧分支不会简单地从克隆的存储库中消失(请参阅rebase文档)。除非每个人都可以重新克隆,否则对于大多数人来说,这可能不是一个非常实用的解决方案。

Note3 / Edit(@JasonRCoombs提供):现在,阶段是标准的阶段rebase将拒绝修改已经推送的变更集。要么通过将阶段更改回草稿(带有hg phases)来愚弄它,要么让旧分支留在原来的位置,然后制作一个正确命名的副本(例如,使用`hg rebase --keep')。


对于小型团队+1,您可以强迫用户克隆这是个好主意-或hg convert改用。
hochl 2012年

5
在较新的Mercurial版本中,如果要移动的更改是“公共”的,则rebase命令将失败,并显示“无法为不可变变更集重新设置基础”。要么将它们强制为草稿(带有hg阶段),要么传递--keep给rebase命令,该命令将复制而不是移动更改。
詹森·库姆斯

在第4步:abort: can't rebase immutable changeset 11b1e2b7dc4f。请注意,我已经将变更集从另一个分支移植到了这个分支中。除此之外,它还可以自由拆分和合并。
Mark Jeronimus 2014年

@Mark,请看上面的注3。
Alexis 2014年

6
无需在新分支上提交变更集然后在其上进行基础调整,您可以忽略该设置并将其.用作您的--dest值,并且重新设置将自动采用新的分支名称。
weberc2 2014年

16

如果上面有变更集,则必须使用带有分支图的convert扩展名将其重命名。每个人都将不得不克隆新的仓库或剥离旧的分支。


1
这是一个有趣的解决方案,您可以详细说明一下吗?
DrM 2013年

15

新建一个名为“ staging”的分支,而忘记另一个分支。


+1就是我要做的。旧的变更集仍将具有旧的分支名称,但是新的变更集将具有新的分支名称。
barjak 2010年

6

这会修改历史记录,并且仅适用于高级Mercurial用户。如果您不知道那是什么意思,请不要这样做。

如果拆线仅是局部的,则可以通过嫁接剥皮的组合将其更改为分段。首先更新到激励发生分歧的祖先变更集。创建登台分支,并将从提交到登台的每个提交都嫁接。现在,登台应该是仿制的复制品。最后,通过删除其第一次提交来销毁鼓舞。

hg update {SHA-1 of the ancestor changeset}
hg branch staging
hg graft {first changeset in stiging} ... {stiging head-1} {stiging head}
hg strip {first changeset in stiging}
hg push --new-branch

1
对于步骤3,您可以使用hg graft {first changeset in stiging}..{stiging head}
KCD
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.