60

我想将变更集从一个分支移动到另一个分支。基本上,我目前有:

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

而且我要:

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

some_new_branch 尚不存在的地方。我习惯了 git,所以我想我缺少一种简单的“善变”方式。

4

4 回答 4

71

一种方法是为 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命令。

于 2010-03-20T18:21:19.930 回答
11

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

于 2010-02-25T22:24:48.480 回答
8

使用 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
于 2014-01-03T16:58:16.447 回答
8

替代移植或补丁,您可以使用移植物

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

请注意,更改历史记录是不好的做法。仅当您尚未推送时才应剥离。否则,您仍然可以撤销您的更改。

于 2015-07-27T15:12:22.527 回答