Как удалить некоторые коммиты в Mercurial, которые были применены к неправильной ветке, а затем воспроизвести их на правильном?
Мой коллега дважды совершил ошибку в своем хранилище на неправильной ветке.
Каков наиболее эффективный способ взять эти два коммита, избавиться от них, а затем зафиксировать их правильно в правой ветке? (изменения не были нажаты)
В идеале мы бы хотели сделать это из TortoiseHG, но, конечно, мы будем использовать командную строку, если это лучший вариант.
Ответы
Ответ 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.
Ответ 3
В этом случае гораздо лучше использовать hg rebase
.
https://www.mercurial-scm.org/wiki/RebaseExtension