Mercurial отменяет последнее совершение

Как я могу отменить последнее последнее случайно (не нажатое) изменение в Mercurial?

Если возможно, предпочтительнее сделать это с TortoiseHg.

Обновление

В моем конкретном случае я совершил набор изменений (не нажал). Затем я вытащил и обновил с сервера. С этими новыми обновлениями я решил, что моя последняя фиксация устарела, и я не хочу ее синхронизировать. Таким образом, кажется, что hg rollback не совсем то, что я ищу, потому что он откатывает вытачку вместо моей фиксации.

Ответ 1

Один из способов hg rollback (устарел от Hg2.7, август 2013 г.)

Пожалуйста, используйте hg commit --amend вместо rollback для исправления ошибок в последнем фиксации.

Откат последней транзакции в репозитории.

При совершении или слиянии Mercurial добавляет последнюю запись изменений.
Mercurial сохраняет журнал транзакций имени каждого затронутого файла и его длины до транзакции. При прерывании он обрезает каждый файл до его предыдущей длины. Эта простота - одно из преимуществ создания revlogs append-only. Журнал транзакций также позволяет выполнить операцию отмены.

См. Раздел Восстановление TortoiseHg:

alt text

В этой теме также подробно описывается разница между hg rollback и hg strip:
(написанный Мартином Гейслером, который также участвует в SO)

  • " hg rollback " удалит последнюю транзакцию. Транзакции - это концепция, которая часто встречается в базах данных. В Mercurial мы начинаем транзакцию, когда выполняются определенные операции, такие как фиксация, push, pull...
    Когда операция завершится успешно, транзакция будет отмечена как полная. Если возникает ошибка, транзакция "откатывается", и репозиторий остается в том же состоянии, что и раньше.
    Вы можете вручную запустить откат с помощью "hg rollback". Это приведет к отмене последней транзакционной команды. Если команда pull привела 10 новых наборов изменений в репозиторий на разных ветвях, то " hg rollback " удалит их все. Обратите внимание: нет резервной копии при откате транзакции!

  • " hg strip " удалит набор изменений и все его потомки. Набор изменений сохраняется как комплект, который вы можете применить снова, если вы нуждаетесь в них.

ForeverWintr предлагает в комментариях (в 2016 году, 5 лет спустя)

Вы можете "un-commit" файлы, сначала запустив hg, например: hg forget filea; hg commit --amend hg forget filea; hg commit --amend, но это кажется неинтуитивным.
hg strip --keep, вероятно, является лучшим решением для современных hg.

Ответ 2

hg strip полностью удалит ревизию (и любые потомки) из репозитория.

Чтобы использовать полосу, вам нужно установить MqExtension, добавив следующие строки в ваш.hgrc (или mercurial.ini):

[extensions]
mq =

В TortoiseHg команда strip доступна в верстаке. Щелкните правой кнопкой мыши на ревизии и выберите "Изменить историю" → "Стрип".

Поскольку strip изменяет историю хранилища, вы должны использовать ее только в версиях, которые еще не были доступны никому. Если вы используете mercurial 2. 1+, вы можете использовать этапы для отслеживания этой информации. Если фиксация все еще находится в стадии проекта, она не была передана другим репозиториям, поэтому вы можете спокойно ее удалить. (Спасибо Засурусу за это указание).

Ответ 3

Так как вы не можете откат, вы должны объединить эту фиксацию в новую голову, которую вы получили, когда вы потянули. Если вы не хотите выполнять какую-либо работу, которую вы сделали в этом, вы можете легко сделать это, используя этот совет.

Итак, если вы потянули и обновили свою голову, вы можете сделать это:

hg --config ui.merge=internal:local merge

сохраняет все изменения в текущей проверенной ревизии, и ни одно из изменений в проверенной версии (тот, который вы написали, что вы больше не хотите).

Это отличный способ сделать это, потому что он сохраняет вашу историю точной и полной. Если через 2 года кто-то найдет ошибку в том, что вы потянули, вы можете посмотреть в своей (неиспользуемой, но сохраненной) реализации того же самого и пойти "о, я сделал это правильно".:)

Ответ 4

hg rollback - это то, что вы хотите.

В TortoiseHg hg rollback выполняется в диалоговом окне фиксации. Откройте диалоговое окно фиксации и выберите "Отменить".

alt text

Ответ 5

В текущей версии TortoiseHg Workbench 4.4.1 (07.2018) вы можете использовать Repository - Rollback/undo...:
enter image description here

Ответ 6

после того, как вы потянули и обновили свое рабочее пространство, сделайте thg и щелкните правой кнопкой мыши на наборе изменений, из которого вы хотите избавиться, а затем нажмите "Изменить историю" → полоса, он удалит набор изменений, и вы укажете на подсказку по умолчанию.

Ответ 7

Обходной путь.

Если вы не нажмете на сервер, вы будете клонировать в новую папку вымывание (удалить все файлы) из папки вашего репозитория и клонировать новое.