Mercurial отменить последний коммит
Как я могу отменить мое последнее случайно совершенное (не нажатое) изменение в Mercurial?
Если возможно, способ сделать это с TortoiseHg будет предпочтительнее.
обновление
в моем конкретном случае я запустил набор изменений (не нажал). Затем я вытащил и обновил с сервера. С этими новыми обновлениями я решил, что моя последняя фиксация устарела, и я не хочу ее синхронизировать. Так кажется, что hg rollback
- Это не совсем то, что я ищу, потому что это откатило бы тягу вместо моего обязательства.
7 ответов
один из способов будет (устарело с Hg2.7 августа 2013)hg rollback
пожалуйста, используйте
hg commit --amend
вместоrollback
для исправления ошибок в последнем коммите.откат последней транзакции в хранилище.
, когда совершение или слияние, Mercurial добавляет изменений запись последняя.
Деятельный сохраняет журнал транзакций с именем каждого файла и его длиной до транзакции. При прерывании он усекает каждый файл до его предыдущей длины. Эта простота - одно из преимуществ создания revlogs добавить-только. Журнал транзакций также разрешает операцию отмены.
посмотреть раздел восстановления TortoiseHg:
этой теме также подробно разница между hg rollback
и hg strip
:
(написано Мартин Гайслер кто и делает так)
'
hg rollback
' удалить последнюю транзакцию. Сделки понятие часто встречается в базах данных. В Mercurial мы начинаем транзакцию, когда выполняются определенные операции, такие как commit, push, pull...
Когда операция завершается успешно, транзакция помечается как завершенная. Если возникает ошибка, транзакция "откатывается" и репозиторий остается в том же состоянии, что и раньше.
Вы можете вручную запустить откат с помощью "HG rollback". Это отменит последнюю транзакционную команду. Если команда pull принесла 10 новых наборов изменений в репозиторий в разных ветвях, то'hg rollback
' удалить их все. Обратите внимание: есть резервное копирование при откате транзакции!'
hg strip
' удалит набор изменений и всех его потомков. Этот изменений сохраняются как пакет, который вы можете применить снова, если вы нужно их вернуть.
ForeverWintr предполагает, в комментариях (в 2016 году, 5 лет спустя)
вы можете "отменить фиксацию" файлов, сначала забыв их, например:
hg forget filea; hg commit --amend
, но это кажется сложным.hg strip --keep
вероятно лучшее решение для современного hg.
hg strip
полностью удалит ревизию (и любые потомки) из репозитория.
чтобы использовать strip вам нужно установить MqExtension добавить следующие строки в ваш .hgrc (или mercurial.ini-файл):
[extensions]
mq =
в TortoiseHg команда полосы доступна на верстаке. Щелкните правой кнопкой мыши ревизию и выберите "Изменить историю" - > "полоса".
С strip
изменяет историю репозитория, которую вы должны только используйте его в версиях, которые еще никому не были доступны. Если вы используете mercurial 2.1+, вы можете использовать этапы для отслеживания этой информации. Если фиксация все еще находится на этапе Черновика, она не была передана другим репозиториям, поэтому вы можете безопасно ее удалить. (Спасибо Засурусу за указание на это).
поскольку вы не можете откатить, вы должны объединить эту фиксацию в новую голову, которую вы получили, когда потянули. Если вы не хотите какой-либо работы, которую вы сделали в нем, вы можете легко сделать это с помощью этот совет.
Итак, если вы потянули и обновление по голове можно сделать так:
hg --config ui.merge=internal:local merge
сохраняет все изменения в текущей проверенной редакции и ни одно из изменений в не проверенной редакции (той, которую вы написали, что вы больше не хотеть.)
Это отличный способ, чтобы сделать это, потому что он держит вашу историю точной и полной. Если через 2 года кто-то найдет ошибку в том, что вы сняли, вы можете посмотреть в своей (неиспользованной, но сохраненной) реализации того же самого и сказать: "о, я сделал это правильно". :)
hg rollback
это то, что вы хотите.
в TortoiseHg,hg rollback
выполняется в диалоговом окне фиксации. Откройте диалог фиксации и выберите "Отменить".
после того, как вы вытащили и обновили свое рабочее пространство, сделайте thg и щелкните правой кнопкой мыши на наборе изменений, от которого вы хотите избавиться, а затем нажмите изменить историю -> полоса, он удалит набор изменений, и вы укажете на подсказку по умолчанию.
его решение.
Если вы не нажимаете на сервер, вы будете клонировать в новую папку else washout (удалить все файлы) из папки репозитория и клонировать новый.