Как удалить фиксацию в Mercurial?

Я хочу полностью удалить коммит Mercurial, как если бы он никогда не был введен в репозиторий, и вернуться к моему предыдущему коммиту.

Это возможно?


person mdp    schedule 22.02.2011    source источник
comment
Дубликат stackoverflow.com/questions/2338986/ - см., в частности, ответ stackoverflow.com/a/6549478/8479   -  person Rory    schedule 06.11.2012
comment
Возможный дубликат Есть ли способ удалить локальные коммиты в Mercurial?   -  person StayOnTarget    schedule 24.10.2018


Ответы (8)


Если это была ваша последняя фиксация и вы ее никуда не отправляли, вы можете сделать это с помощью rollback. В противном случае нет. Не совсем. Пора сменить пароли.

Изменить. Было указано, что вы можете клонировать более старую ревизию и объединить изменения, которые хотите сохранить. Это также верно, если вы не отправили его в репо, которое вы не контролируете. После того, как вы нажмете, ваши данные, скорее всего, будет очень трудно вернуть.

person nmichaels    schedule 22.02.2011
comment
ха-ха, я случайно это сделал (вот и мой закрытый ключ ssh) - person Adam Gent; 23.02.2011
comment
Как насчет изменения фазы на секретную, если вы еще не отправили ревизию? - person 1nfiniti; 22.03.2013
comment
@mikeyUX: Этот ответ был написан до выхода версии 2.1, но изменение фазы на секретную на самом деле не удаляет набор изменений; он просто мешает вам увидеть его в hg outgoing или поделиться им с другим репозиторием. Если изменить фазу на секретную, то клонирование будет делать примерно то же, что и моя редакция. Я бы использовал histedit или mq, прежде чем делать это. - person nmichaels; 28.03.2013
comment
Используя HisteditExtension, вы можете отказаться от фиксации. Эта функция может быть новее, чем принятый ответ. - person Jon Davis; 26.07.2014
comment
@ stimpy77: Histedit все равно не поможет, если вы нажали или кто-то потянул. Если ничего из этого не произошло, то вы правы. Histedit, mq, rollback и strip уничтожат изменения, если вы их вежливо спросите. - person nmichaels; 29.07.2014

Вы можете попытаться удалить информацию mq о вашем коммите.

  • Для этого вам нужно зайти в Файл-> Настройки-> Расширения.
  • Там проверьте mq и перезапустите gui.
  • После этого просто щелкните правой кнопкой мыши ненужную фиксацию и ModifyHistory-> Strip
person Stanislav    schedule 15.12.2011
comment
Вы говорите о TortoiseHg? - person Pluto; 25.08.2015

Для редактирования истории я бы использовал расширение Histedit Extension.

 hg histedit 45:c3a3a271d11c

Однако имейте в виду, что это имеет смысл только в ситуации, когда вы еще не отправили коммиты в общедоступный репозиторий, вы владеете общедоступным репозиторием и / или можете учитывать все имеющиеся там клоны. Если вы получили следующую ошибку:

abort: can't rebase immutable changeset 43ab8134e7af

Это означает, что Mecurial считает, что это общедоступный набор изменений (см. этапы), который уже был продвинут - вы может заставить его снова стать draft, делая:

hg phase -f -d 45:c3a3a271d11c
person Daniel Sokolowski    schedule 29.08.2013
comment
Я считаю, что это более правильный современный ответ. Hg эволюционирует. - person Jon Davis; 26.07.2014

Я с этим сталкиваюсь довольно часто. Я делаю фиксацию и затем тяну, чтобы протолкнуть. Но затем что-то приближается, что делает мой недавно сделанный коммит ненужным. Одного hg rollback недостаточно, потому что он только отменяет тягу ...

Вот что нужно сделать:

hg strip <rev>

Все безболезненно, когда вы никуда не продвигаете свои изменения.

person mike3996    schedule 13.01.2014

Вы можете использовать "hg backout" в основном для обратного слияния. Все варианты обсуждаются в свободно доступной книге «Mercurial: The Definitive Guide»:

http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html

person Jeremy Whitlock    schedule 22.02.2011
comment
Я понимаю, что мое предложение не удаляет фиксацию, но ссылка действительно говорит обо всех параметрах, включая вариант hg rollback, предложенный nmichaels. - person Jeremy Whitlock; 23.02.2011
comment
В целом мне нравится это решение. Это нормально - признавать свои ошибки и вести историю своих плохих коммитов, а также тот факт, что вы их поддержали. - person Kamil Kisiel; 23.02.2011

Если это более одного коммита и / или вы уже отправили его в другое место, вы можете клонировать свой репозиторий и указать последний набор изменений, который следует клонировать.

См. Мой ответ здесь, как это сделать:
Mercurial: исправить ошибочную историю

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

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

person Christian Specht    schedule 22.02.2011

Если вы используете черепаху, вы можете использовать историю изменений> полоса ...

person user1875812    schedule 04.12.2012

да. Если я не ошибаюсь, начиная с версии 2.3 (отн. 2012/08/01) вы можете использовать HisteditExtension с командой drop для удаления фиксации вместе с strip или backout для удаления изменений.

Простой поиск в Google по этой функции: https://www.google.com/webhp#q=histedit+drop

person Jon Davis    schedule 26.07.2014