Mercurial: откат "hg commit -amend".

Я случайно сделал "hg commit -amend" вместо простого коммита. Как я могу отменить фиксацию до изменения?

Ответ 1

ПРИМЕЧАНИЕ: Этот ответ теперь устарел. См. ответ от @Sorina Sandu.


Смотрите hg help commit, где говорится:

Флаг -amend может использоваться для изменения родителя каталог с новой фиксацией, которая содержит изменения в родительском дополнение к тем, которые в настоящее время сообщаются "статусом hg", если таковые имеются. Старый фиксатор сохраняется в резервном комплекте в ".hg/strip-backup" (см. "hg help bundle" и "hg help unbundle" о том, как его восстановить).

Ответ 2

Вы можете использовать hg reflog (из расширение журнала) и hg reset <hash>.

hg reflog -v

должен дать что-то вроде:

<old-hash> -> <new-hash> <user> <timestamp>  commit --amend <some-path>

если это исправление, которое вы хотите вернуть, просто используйте:

hg reset <old-hash>

Конец будет возвращен к тому, что было ранее, и изменения, которые были изменены, теперь должны быть незафиксированными изменениями (проверьте с помощью hg status и hg diff).

Ответ 3

  • Найти последнюю сохраненную резервную копию в каталоге .hg/strip-backup
  • hg unbundle <latest backup>
  • Теперь у вас должно быть две головы - одна с измененной фиксацией, другая с двумя коммитами (первая односторонняя фиксация перед внесением поправок, вторая - кавычки: "временное изменение фиксации для (старый хеш-фиксация)".
  • если у вас есть расширение histedit, вы можете сделать hg histedit на нем, чтобы изменить его (например, выберите edit, чтобы достичь состояния непосредственно перед фиксацией, т.е. когда вы можете увидеть все изменения, используя hg diff).

Не забудьте снять старую голову.