Я случайно сделал "hg commit -amend" вместо простого коммита. Как я могу отменить фиксацию до изменения?
Mercurial: откат "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
).
Не забудьте снять старую голову.