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

时间:2010-12-07 16:00:00

标签: mercurial branch dvcs

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

5 个答案:

答案 0 :(得分:215)

更新到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 :(得分:58)

对于未来的读者:使用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提供):既然phases是mercurial的标准,rebase将拒绝修改已被推送的变更集。要么通过将阶段更改回草稿(使用hg phases)来欺骗它,要么让旧分支保持原样,只需制作一个正确命名的副本(例如,使用`hg rebase --keep')。 / p>

答案 2 :(得分:16)

如果你有变更集,那么你必须使用带有分支图的convert extension来重命名它。然后每个人都必须克隆新的回购或剥离旧的分支。

答案 3 :(得分:15)

创建一个名为“staging”的新分支并忘记其他分支...

答案 4 :(得分:3)

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

如果stiging仅限于本地,您可以使用graftstrip的组合将其更改为暂存。首先更新到stiging已经分歧的祖先变更集。创建暂存分支并将每个提交从stiging移植到staging。分段现在应该是stiging的副本。最后,通过剥离第一次提交来破坏stiging。

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