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>
Это будет обновлено до родителя фиксации, а затем заменит файлы в рабочей копии версиями при этом фиксации.