Как я могу удалить некоторые коммиты в Mercurial, которые были применены к неправильной ветке, а затем воспроизвести их на правильную? - PullRequest
12 голосов
/ 23 июля 2010

Мой коллега дважды совершил в своем хранилище неправильную ветку.

Какой самый эффективный способ взять эти два коммита, избавиться от них и затем правильно зафиксировать их в правильной ветке?(изменения не были переданы)

В идеале мы хотели бы сделать это из TortoiseHG, но, конечно, мы будем использовать командную строку, если это лучший вариант.

Ответы [ 3 ]

14 голосов
/ 29 июля 2010

Может помочь расширение Mercurial Queues (mq).

Учитывая историю изменений, которая выглядит следующим образом:

@  changeset:   3:9dc681b56325
|  summary:     file4
|
o  changeset:   2:6675b3f86aa7
|  summary:     file3
|
| o  changeset:   1:4a3209ed5b2f
|/   summary:     file2
|
o  changeset:   0:6ab45ac3bd6d
   summary:     file1

Следующие команды перемещают набор изменений файла 'file4' в другую ветвь(заголовок 'file2'):

hg qimport -r 3     // convert revision 3 to a patch
hg qpop             // remove it
hg update 1         // switch to the other branch head
hg qpush            // push the change back
hg qfin -a          // convert the applied patch back to a changeset

В результате:

@  changeset:   3:3faa754edb0b
|  summary:     file4
|
| o  changeset:   2:6675b3f86aa7
| |  summary:     file3
| |
o |  changeset:   1:4a3209ed5b2f
|/   summary:     file2
|
o  changeset:   0:6ab45ac3bd6d
   summary:     file1

Обратите внимание, что хэш набора изменений для версии 3 изменен, поскольку у набора изменений есть другой родительский элемент.Более поздние версии TortoiseHg также поддерживают расширение MQ.

6 голосов
/ 23 июля 2010

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

http://mercurial.aragost.com/kick-start/tasks.html#transplanting-changes

Решением моей проблемы было обновление ветки, в которой должны были применяться два изменения, пересадка двух наборов изменений и затем использование mq для удаления изменений. Все это можно сделать и в черепахе.

2 голосов
/ 19 июня 2013

В этом случае гораздо лучше использовать hg rebase.

https://www.mercurial -scm.org / wiki / RebaseExtension

...