Как переместить некоторый набор изменений в новую ветвь в меркуриальном
Я хочу переместить набор изменений из одной ветки в другую. В принципе, у меня в настоящее время есть:
A -> B -> C -> D # default branch
И я хочу:
A # default branch
\-> B -> C -> D # some_new_branch
Где some_new_branch еще не существует. Я привык к git, поэтому, я думаю, есть простой "меркуриальный" способ, который мне не хватает.
Ответы
Ответ 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 extension strip
.
Ответ 2
Звучит немного как операция вишневого захвата в git. Transplant Extension может быть тем, что вы ищете.
Ответ 3
С 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
Ответ 4
Альтернатив трансплантации или патчу, вы можете использовать graft.
hg update A
hg branch branchname
hg graft -D "B:D"
hg strip B
Обратите внимание, что изменение истории - это плохая практика. Вы должны снимать, только если вы еще не нажали. В противном случае вы можете отменить свои изменения.