Вам нужна команда hg rollback
, но посмотрите, используете ли вы Mercurial 2.2 или более позднюю версию ниже.
Команда отката удалит последнюю транзакцию из вашего хранилища. Коммит - это транзакция, поэтому вы можете использовать это как
% hg commit -m 'My elaburate bugfix.' foo.c foo.h
% hg rollback
% hg commit -m 'My elaborate bugfix.' foo.c foo.h
После отката файлы снова будут рассматриваться как измененные, а это означает, что второй коммит сохранит те же изменения, что и первый, но с лучшим сообщением фиксации.
Осторожно: hg rollback
более мощный, чем простая «незафиксированная» функция, и вы можете использовать ее, чтобы выбросить работу , если вы не будете осторожны. Чтобы выбросить коммит, сделайте
$ hg commit -m 'My big and very difficult bugfix'
$ hg pull --update
$ hg rollback
Теперь вы потеряли последний сделанный вами коммит, и поскольку вы обновили рабочую копию до какой-то другой ревизии, изменения в этом коммите пропали . Поэтому вы должны использовать hg rollback
только для отмены фиксации, если вы уверены, что hg commit
действительно была последней командой, работавшей с рабочей копией.
Кроме того, если вы не передали сообщение коммита в командной строке, вы не можете просто дважды нажать стрелку вверх, чтобы повторить коммит после отката. Однако Mercurial 1.5 и более поздние версии сохранят ваше последнее сообщение о коммите в .hg/last-message.txt
, чтобы вы всегда могли найти его снова после отката.
Mercurial 2.2 имеет новый --amend
флаг для hg commit
. Это позволит вам дополнить последний коммит новыми изменениями. Он просто включает изменения, перечисленные в hg status
, в родительский коммит, как если бы вы откатились и зафиксировали снова.