我们现在有了一个“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只有一个父母。当然,你可以直接使用显式的修订编号。
注1:如果分支stiging包括与其他分支的合并,我认为这将保留它们,只要staging和stiging具有相同的父级。但我肯定会仔细检查。
注2:因为这样会编辑历史,所以旧的分支不会简单地从克隆的存储库中消失(请参阅rebase文档)。除非每个人都能重新克隆,否则对于大型团队来说,这可能不是一个非常实际的解决方案。
注3/Edit(由@JasonRCoombs提供):现在阶段在mercurial中是标准的,rebase将拒绝修改已经推送的变更集。要么通过将阶段更改回草稿(使用hg阶段)来愚弄它,要么让旧的分支保持原样,只做一个正确命名的副本(例如,使用' hg rebase—keep')。
这将修改历史记录,并且仅适用于高级Mercurial用户。如果你不知道那是什么意思,就别这么做。
如果标记只是局部的,你可以改变它的分期结合移植和条。首先更新到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
推荐文章
- Mercurial:我可以重命名分支吗?
- 在Mercurial中是否有删除本地提交的方法?
- Mercurial:如何修改上次提交?
- 如何使用TortoiseHG进行分支
- 我如何从现有回购的分支创建一个新的GitHub回购?
- 如何将Git分支移到它自己的存储库中?
- 如何从我的工作目录中删除所有未跟踪的文件?
- Git同时在两个分支上工作
- 删除git中的分支是否会将其从历史记录中删除?
- 如何做Mercurial的'hg删除'所有丢失的文件?
- 防止在GitHub上推送到master ?
- "ERROR:root:code for hash md5 was not found"当使用任何hg mercurial命令时
- Mercurial初学者:最终实用指南
- 什么是跟踪分支?
- Subversion中的主干、分支和标签是什么?