我们现在有一个“stiging”分支,但“staging”似乎更符合语义。如何处理这个问题是一个好的策略?
更新到 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
针对未来的读者:使用 rebase
扩展,您可以创建一个与 stiging
相同父级的新分支,并将整个分支历史记录移动到该分支中,如下所示:
hg update -r "parents(min(branch('stiging')))"
hg branch staging
hg commit
hg rebase --source "min(branch('stiging'))" --dest staging
stiging
只有一个父节点。当然,你也可以直接使用明确的修订版本号。stiging
包括与其他分支的合并,则我认为只要staging
和stiging
具有相同的父节点,它们就会保留这些合并。但我肯定会再次核实。rebase
文档)。除非每个人都能重新克隆,否则对于大型团队来说可能不是一个非常实际的解决方案。rebase
将拒绝修改已经推送的变更集。要么通过更改阶段回到草稿状态(使用hg phases
),要么让旧分支保持原样,并创建一个正确命名的副本(例如,使用`hg rebase --keep')。hg convert
是个好主意。 - hochlhg phases
将其强制转换为草稿状态,或在运行重新整理命令时传递--keep
选项,这将复制而不是移动这些更改。 - Jason R. Coombsabort: can't rebase immutable changeset 11b1e2b7dc4f
。请注意,我已经将另一个分支的变更集嫁接到了这个分支中。除此之外,它没有分裂和合并。 - Mark Jeronimus.
作为 --dest
参数值,变基将自动采用新分支名称。 - weberc2这会修改历史记录,仅适用于高级Mercurial用户。如果您不知道这意味着什么,请不要这样做。
如果stiging仅为本地,则可以通过graft和strip的组合将其更改为staging。首先更新到stiging分叉的祖先变更集。创建staging分支并将每个提交从stiging移植到staging。现在,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
hg graft {stiging中的第一个变更集}..{stiging head}
。 - KCD
--force
,Mercurial 会 允许您重复使用已关闭的分支名称。例如:hg branch --force v3
。这将导致hg update v3
更新到新的v3
分支,就像您想要的那样。 - Gilistiging
,就不会出现“悬空”的末端。 - Habizzle