Mercurial (hg) эквивалент сброса git (--mixed или --soft)
Что будет эквивалентной командой Mercurial (или рабочий процесс) для
git reset --mixed HEAD^
или же
git reset --soft HEAD^
то есть я хочу оставить рабочее дерево нетронутым, но вернуть хранилище в состояние, в котором оно было до последнего коммита. Удивительно, но я не нашел ничего полезного на stackru или с 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's HEAD
,
Обратите внимание, что если .
есть потомки, те тоже будут раздеты. Если вы хотите сохранить коммит, то, получив идентификатор фиксации, вы можете вместо этого:
hg update .^
hg revert --all -r <commit id>
Это обновит родительский элемент коммита, а затем заменит файлы в рабочей копии версиями этого коммита.
Я считаю, что более современный и простой способ сделать это сейчас -
hg uncommit
. Обратите внимание, что при этом остается пустая фиксация, которая может быть полезна, если вы хотите повторно использовать сообщение фиксации позже. Если вы этого не сделаете, используйте
hg uncommit --no-keep
чтобы не оставлять пустую фиксацию.
hg uncommit [ОПЦИЯ]... [ФАЙЛ]...
отменить фиксацию части или всего локального набора изменений
This command undoes the effect of a local commit, returning the affected files to their uncommitted state. This means that files modified or deleted in the changeset will be left unchanged, and so will remain modified in the working directory. If no files are specified, the commit will be left empty, unless --no-keep