Подтвердить что ты не робот

Как удалить некоторые коммиты в Mercurial, которые были применены к неправильной ветке, а затем воспроизвести их на правильном?

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Расширение 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.