HG: отменить фиксацию из истории

У меня есть репозиторий HG с версиями 1, 2, 3, 4, 5 и 6.

Когда я коммитил версию 4, я по незнанию испортил некоторые изменения в версии 3, которых мне не следовало делать. Я не замечал этого, пока rev 6 уже не был зафиксирован.

Мне нужно отменить изменения в версии 4, но после этого повторно применить все остальные изменения. В основном отмена коммита № 4. Как я могу это сделать?


person Donn Felker    schedule 06.05.2011    source источник


Ответы (2)


Вы хотите отменить hg

Вернуть/отменить действие предыдущего набора изменений...

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

person Jim Bolla    schedule 06.05.2011
comment
Однако, как только я использую откат, как мне повторно применить наборы изменений 5 и 6, которые соответственно были отменены из-за отката? Это та часть, в которой я запутался. Какие-нибудь советы? - person Donn Felker; 06.05.2011
comment
backout создает новый набор изменений после 5,6, который фактически является обратным 4. вам не нужно повторно применять 5 и 6 - person Jim Bolla; 06.05.2011
comment
hg backout -r 4 отменит изменения, сделанные в версии 4, не затрагивая изменения, внесенные в версии 5 и 6. Справочная система предоставляет хороший обзор (selenic.com/hg/help/backout). - person Tim Henigan; 06.05.2011
comment
бэкаут сработал. Вот команда, которую я использовал: hg backout --merge -r 4 --parent 3 - person Donn Felker; 06.05.2011
comment
Было бы очень хорошо, если бы вы добавили в свой ответ больше информации, а не только ссылку. Например, вы можете добавить комментарий @TimHenigan. - person PhoneixS; 09.06.2014

Вы можете использовать расширение MQ:

hg qinit
hg qimport -r 4:tip
hg qpop -a
hg qdelete 4.diff
hg qpush -a
hg qfinish -a

Вышеизложенное — это то, как вы переписываете историю, во что вы хотите, я верю.

Вы также можете использовать hg backout, но это отменяет коммит в вашем рабочем каталоге, и вы можете его зафиксировать.

person manojlds    schedule 06.05.2011
comment
Это то, что я сделал бы в том и только в том случае, если бы я знал, что в последний раз, когда набор изменений из моего репозитория был передан кому-либо еще, был набор изменений 3 или более ранний. В противном случае у вас возникнет неприятная небольшая головная боль при слиянии, когда вы введете новые версии тех же изменений в наборы изменений 4, 5 и 6. - person Chris Phillips; 06.05.2011
comment
Это данность. Переписывание истории — это всегда крайняя мера, особенно когда вы делитесь ею. - person manojlds; 06.05.2011