我想将一个变更集从一个分支移动到另一个分支。基本上,我现在有:
A -> B -> C -> D # default branch
我想要:
A # default branch
\-> B -> C -> D # some_new_branch
如果some_new_branch还不存在,我通常使用git,所以我猜我可能错过了一些简单的“mercurial”方法。
我想将一个变更集从一个分支移动到另一个分支。基本上,我现在有:
A -> B -> C -> D # default branch
我想要:
A # default branch
\-> B -> C -> D # some_new_branch
如果some_new_branch还不存在,我通常使用git,所以我猜我可能错过了一些简单的“mercurial”方法。
一种方法是导出 B、C、D 的补丁;更新到 A;创建分支;应用补丁:
hg export -o patch B C D
hg update A
hg branch branchname
hg import patch
要从默认分支中删除B、C、D,请使用mq扩展的strip
命令。
hg strip B
时,我也失去了从导入的提交中新创建的分支信息,并且它们回到了默认分支。在创建新分支和导入之前进行剥离有所帮助。 - kermahg export -o patch -r B:D
- quick使用Mercurial Queue:
# mark revisions as draft in case they were already shared
#hg phase --draft --force B:D
# make changesets a patch queue commits
# (patches are stored .hg/patches)
hg qimport -r B:D
# pop changesets from current branch
hg qpop -a
#
hg branch some_new_branch
# push changesets to new branch
hg qpush -a
# and make them commits
hg qfinish -a
没有注释:
hg qimport -r B:D
hg qpop -a
hg branch some_new_branch
hg qpush -a
hg qfinish -a
除了移植或修补,您还可以使用graft来完成相同的操作。
hg update A
hg branch branchname
hg graft -D "B:D"
hg strip B
注意,改变历史记录是不好的做法。只有在您尚未推送时才应进行剥离。否则,您仍然可以撤消您的更改。