Как переместить некоторые изменения в новую ветку в Mercurial - PullRequest
55 голосов
/ 08 февраля 2010

Я хочу переместить набор изменений из одной ветви в другую. В основном у меня в настоящее время есть:

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

И я хочу:

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

Где some_new_branch еще не существует. Я привык к мерзавцу, так что я думаю, что есть простой «меркуриальный» способ, которого мне не хватает.

Ответы [ 4 ]

68 голосов
/ 20 марта 2010

Одним из способов является экспорт патча для B, C, D; обновить до A; ветка; применить патч:

hg export -o patch B C D
hg update A
hg branch branchname
hg import patch

Чтобы удалить B, C, D из ветви по умолчанию, используйте команду strip расширения mq.

11 голосов
/ 26 февраля 2010

Звучит как операция по подбору вишни в git. Расширение для трансплантации может быть тем, что вы ищете.

7 голосов
/ 03 января 2014

С ртутной очередью:

# 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
5 голосов
/ 27 июля 2015

Альтернатива пересадке или пластырю, вы можете использовать трансплантат .

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

Обратите внимание, что изменение истории - плохая практика. Вы должны раздеться, только если вы еще не толкнули. В противном случае вы все равно можете отказаться от своих изменений.

...