Mercurial (hg) эквивалент git reset (-mixed или -soft)

что эквивалентно команде mercurial (или workflow) для

git reset --mixed HEAD^

или

git reset --soft  HEAD^

то есть. Я хочу оставить рабочее дерево неповрежденным, но вернуть репозиторий в состояние, которое было до последнего коммита. Удивительно, но я не нашел ничего полезного в stackoverflow или google.

Обратите внимание, что я не могу использовать

hg rollback

поскольку я сделал некоторую переработку истории с помощью HistEdit после последнего коммита.

Добавлено для уточнения: После некоторого восстановления и редактирования истории я закончил с A < -B < -C. Затем я использовал HistEdit для сквоша B и C вместе, получив A < C. Теперь я хочу разделить фиксацию C '(я совершил неправильные файлы в B). Я полагал, что самый простой способ сделать это - вернуть репозиторий в состояние A (которое технически никогда не существовало в репозитории из-за всего переустановки и редактирования истории перед рукой) и рабочего дерева в состояние C ', а затем сделать два совершает.

Ответ 1

Правильный способ репликации git reset --soft HEAD^ (отменить текущую фиксацию, но сохранить изменения в рабочей копии):

hg strip --keep -r .

-1 будет работать только в том случае, если фиксация, которую вы хотите удалить, является последней фиксацией, которая вошла в репозиторий. . относится к текущей проверенной фиксации, которая является ближайшим эквивалентом. Mercurial имеет значение Git HEAD.

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

hg update .^
hg revert --all -r <commit id>

Это будет обновлено до родителя фиксации, а затем заменит файлы в рабочей копии версиями при этом фиксации.