如何将一些变更集移动到mercurial的新分支

我想将一个变更集从一个分支移到另一个分支。 基本上我现在有:

A -> B -> C -> D # default branch 

而且我要:

 A # default branch \-> B -> C -> D # some_new_branch 

那里some_new_branch还不存在。 我已经习惯了,所以我猜想我有一个简单的“mercurial”方法。

一种方法是导出B,C,D的补丁; 更新到A; 科; 应用补丁:

 hg export -o patch BCD hg update A hg branch branchname hg import patch 

要从默认分支中删除B,C,D,请使用mq分机的strip命令。

听起来有点像git中的樱桃挑选操作。 移植扩展可能是你在找什么。

与Mercurial队列:

 # 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 

替代移植或补丁,你可以使用移植 。

 hg update A hg branch branchname hg graft -D "B:D" hg strip B 

请注意,改变历史是不好的做法。 只有在尚未推送的情况下,您才应该剥离。 否则,您仍然可以退出您的更改。