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

Kev*_*Dog 203 mercurial branch dvcs

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

Ell*_*ron 217

更新到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
Run Code Online (Sandbox Code Playgroud)

  • 如果你在分支前关闭`stiging`,你就不会得到"松散的结束" (7认同)
  • @JoshuaGoldberg,3noch错了.如果您使用`--force`,Mercurial*将允许您重复使用已关闭的分支名称.例如:`hg branch --force v3`.这将导致`hg update v3`更新到新的`v3`分支,如你所愿. (4认同)
  • Mercurial会允许重复使用封闭分支的名称吗?即,如果你有一个v3分支,你可以使用上面的技术将它重命名为v4然后分叉_new_ v3分支,尽管留下了一个封闭的v3? (2认同)
  • 确认@Gili对hg help branch的评论:" - force设置分支名称,即使它影响现有分支" (2认同)

ale*_*xis 60

对于未来的读者:使用rebase扩展,您可以使用相同的父级创建一个新分支,stiging并将整个分支历史记录移动到它,如下所示:

hg update -r "parents(min(branch('stiging')))"
hg branch staging
hg commit
hg rebase --source "min(branch('stiging'))" --dest staging
Run Code Online (Sandbox Code Playgroud)

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

注1:如果分支stiging包含与其他分支的合并,我认为这将保留它们,只要staging并且stiging具有相同的父分支.但我当然会仔细检查.

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

Note3/Edit(由@JasonRCoombs提供):现在这些阶段是mercurial中的标准,rebase将拒绝修改已经推送的变更集.要么通过将阶段更改回草稿(with hg phases)来欺骗它,要么让旧分支保持原样,只需制作一个正确命名的副本(例如,使用`hg rebase --keep').

  • 您可以省略它并使用`.`作为`--dest`值,而不是在新分支上提交变更集然后在其上重新设置变更集,并且rebase将自动采用新的分支名称. (6认同)
  • 对于Mercurial的后期版本,如果要移动的更改是"public",则rebase命令将失败,并且"无法重新定义不可变的变更集".要么将它们强制为草稿(使用hg阶段),要么将"--keep"传递给rebase命令,该命令将复制而不是移动更改. (5认同)

tgh*_*ghw 16

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

  • 这是一个有趣的解决方案,您能详细说明一下吗? (2认同)

lct*_*r30 15

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


AWr*_*tIV 6

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

如果stiging仅是局部的,你可以把它改成与组合分期移植物。首先更新到 stiging 分歧的祖先变更集。创建 staging 分支并将每个提交从 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
Run Code Online (Sandbox Code Playgroud)