Я тоже сталкивался с этой проблемой. Я сделал 2 commit
и хотел откатить и удалить оба коммита.
$ hg rollback
Но hg rollback
просто откатывается до последнего коммита, а не 2 коммитов. В то время я не осознавал этого и изменил код.
Когда я обнаружил, что hg rollback
только что откатил один коммит, я обнаружил, что могу использовать hg strip #changeset#
. Итак, я использовал hg log -l 10
, чтобы найти последние 10 коммитов и получить нужную ревизию, которую я хотел strip
.
$ hg log -l 10
changeset: 2499:81a7a8f7a5cd
branch: component_engine
tag: tip
user: myname<myname@email.com>
date: Fri Aug 14 12:22:02 2015 +0800
summary: get runs from sandbox
changeset: 2498:9e3e1de76127
branch: component_engine
user: other_user_name<name@email.com>
date: Mon Aug 03 09:50:18 2015 +0800
summary: Set current destination to a copy incoming exchange
......
$ hg strip 2499
abort: local changes found
Что означает abort: local changes found
? Это означает, что hg
обнаружил изменения в коде, которые еще не были зафиксированы. Итак, чтобы решить эту проблему, вы должны hg diff
сохранить код, который вы изменили, и hg revert
и hg strip #changeset#
. Просто так:
$ hg diff > /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff
$ hg revert file_you_have_changed
$ hg strip #changeset#
После того как вы сделали выше, вы можете patch
файл diff и ваш код можно добавить обратно в ваш проект.
$ patch -p1 < /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff