Как я могу отменить последнее случайно внесенное (не отправленное) изменение в Mercurial?
Если возможно, предпочтительнее было бы сделать это с помощью TortoiseHg.
Обновить
В моем конкретном случае я выполнил набор изменений (не нажал). Потом вытащил и обновил с сервера. С этими новыми обновлениями я решил, что моя последняя фиксация устарела и я не хочу ее синхронизировать. Похоже, что hg rollback
это не совсем то, что я ищу, потому что это откатит тягу вместо моей фиксации.
mercurial
tortoisehg
mercurial-commit
Мартин Буберль
источник
источник
hg rollback
и снова потянуть?strip --keep
: stackoverflow.com/questions/29413851/… напрямую решает задачу, как и MQ qimport. В качестве альтернативы, может быть лучше простоrebase
в сценарии, если локальные изменения также должны быть сохранены и нет конфликта. (Используйте слияние, чтобы сохранить некоторые объединенные изменения из обеих ветвей, когда это желаемая конечная цель графа, особенно в случае, не связанном с fastforward.) Также может быть допустимым просто закрыть ветвь, которая по-прежнему «сохраняет историю» (но иначе, чем слияние) в зависимости от желаемого конечного состояния.hg strip --keep
это команда сделать использование, но вы должны обеспечить пересмотр, например:hg strip --keep -r .
. Этот ответ хорошо объясняет stackoverflow.com/a/19064016/1286571Ответы:
Один из способов был бы
(не рекомендуется с Hg2.7, август 2013 г.)hg rollback
См. Раздел Восстановление TortoiseHg :
В этой ветке также подробно описывается разница между
hg rollback
иhg strip
:(написано Мартином Гейслером, который также участвует в SO)
ForeverWintr предлагает в комментариях (в 2016 году, 5 лет спустя)
источник
hg rollback
отменяет извлечение вместо фиксации.hg commit --amend
это должно работать, но для меня это дало мне редактор для изменения сообщения о фиксации и не было способа изменить, какие файлы были включены. Я вышел из редактора без сохранения и обнаружил, что моя ошибочная фиксация была изменена, чтобы включить ВСЕ измененные файлы!hg commit --amend
. Вы можете «отменить фиксацию» файлов, предварительноhg forget
пометив их, например:,hg forget filea; hg commit --amend
но это кажется неинтуитивным. hg strip --keep , вероятно, лучшее решение для современной hg.hg strip
полностью удалит ревизию (и всех потомков) из репозитория.Чтобы использовать strip, вам необходимо установить MqExtension , добавив следующие строки в ваш .hgrc (или mercurial.ini):
В TortoiseHg команда strip доступна в рабочей среде. Щелкните правой кнопкой мыши ревизию и выберите «Изменить историю» -> «Удалить».
Поскольку
strip
изменяет историю репозитория, вы должны использовать ее только для ревизий, которые еще никому не предоставлены. Если вы используете mercurial 2.1+, вы можете использовать фазы для отслеживания этой информации. Если коммит все еще находится в стадии черновика, он не был передан другим репозиториям, поэтому вы можете безопасно удалить его. (Спасибо Засуру за указание на это).источник
Поскольку вы не можете выполнить откат, вам следует объединить этот коммит с новой головой, которую вы получили при вытаскивании. Если вам не нужна проделанная вами работа, вы можете легко сделать это с помощью этого совета .
Итак, если вы вытащили и обновили их голову, вы можете сделать это:
сохраняет все изменения в текущей извлеченной ревизии, и ни одно из изменений в не извлеченной ревизии (той, которую вы написали и которая вам больше не нужна).
Это отличный способ сделать это, потому что он сохраняет вашу историю точной и полной. Если через 2 года кто-то обнаружит ошибку в том, что вы удалили, вы можете посмотреть в своей (неиспользованной, но сохраненной) реализации того же самого и сказать: «О, я сделал это правильно». :)
источник
hg rollback
это то, что вы хотите.В TortoiseHg
hg rollback
это выполняется в диалоговом окне фиксации. Откройте диалоговое окно фиксации и выберите «Отменить».источник
В текущей версии TortoiseHg Workbench 4.4.1 (07.2018) вы можете использовать
Repository
-Rollback/undo...
:источник
Его обходной путь.
Если вы не нажмете на сервер, вы будете клонировать в новую папку, иначе вымыть (удалить все файлы) из папки вашего репозитория и клонировать новую.
источник
после того, как вы вытащили и обновили свое рабочее пространство, сделайте thg и щелкните правой кнопкой мыши набор изменений, от которого вы хотите избавиться, а затем щелкните изменить историю -> полоса, он удалит набор изменений, и вы укажете на подсказку по умолчанию.
источник