web-dev-qa-db-ja.com

Mercurialのいくつかのチェンジセットを新しいブランチに移動する方法

チェンジセットをあるブランチから別のブランチに移動したい。基本的に、私は現在持っています:

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

そして私は欲しい:

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

Some_new_branchがまだ存在しない場所。私はgitに慣れているので、簡単な "Mercurial"の方法がないと思います。

57

1つの方法は、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コマンドを使用します。

69
Mark Tolonen

Gitのチェリーピック操作のように聞こえます。 Transplant Extension があなたの探しているものかもしれません。

11
crazyscot

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
7

移植またはパッチの代わりに、 graft を使用できます。

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

履歴の変更は悪い習慣であることに注意してください。まだプッシュしていない場合にのみ、ストリップする必要があります。そうしないと、変更をバックアウトする可能性があります。

6
Kbii