Как удалить коммит в Mercurial? - PullRequest
       74

Как удалить коммит в Mercurial?

55 голосов
/ 23 февраля 2011

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

Возможно ли это?

Ответы [ 8 ]

33 голосов
/ 23 февраля 2011

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

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

29 голосов
/ 15 декабря 2011

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

  • Для этого вам нужно перейти Файл-> Настройки-> Расширения.
  • Там проверьте mq и перезапустите графический интерфейс.
  • После этого просто щелкните правой кнопкой мыши на ненужном коммите и ModifyHistory-> Strip
10 голосов
/ 30 августа 2013

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

 hg histedit 45:c3a3a271d11c

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

abort: can't rebase immutable changeset 43ab8134e7af

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

hg phase -f -d 45:c3a3a271d11c
6 голосов
/ 13 января 2014

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

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

hg strip <rev>

Вещи безболезненны, когда вы не толкаетенаборы изменений в любом месте.

5 голосов
/ 23 февраля 2011

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

Смотрите мой ответ здесь, как это сделать:
Mercurial: исправление поврежденной истории

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

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

5 голосов
/ 23 февраля 2011

Вы можете использовать "hg backout", чтобы сделать обратное слияние в принципе. Все варианты обсуждаются в свободно доступной книге "Mercurial: полное руководство":

http://hgbook.red -bean.com / чтение / выяснение и фиксирующих-mistakes.html

3 голосов
/ 04 декабря 2012

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

1 голос
/ 26 июля 2014

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

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

...