Как мне сделать сброс настроек --hard HEAD на Mercurial?
Я пользователь Git, пытающийся использовать Mercurial.
Вот что случилось: я сделал hg backout
на ревизии я хотел вернуть. Это создало новую голову, поэтому hg дал мне указание слиться (я полагаю, вернуться к "default"). После слияния он сказал мне, что я все еще должен был совершить. Затем я заметил что-то, что я сделал не так при разрешении конфликта в слиянии, и решил, что хочу иметь все как прежде hg backout
я хочу, чтобы это несвязанное слияние прошло. На Git этот некоммитированный материал будет в индексе, и я просто сделаю git reset --hard HEAD
чтобы стереть это, но из того, что я прочитал, индекс не существует на Mercurial. Так как же мне отказаться от этого?
5 ответов
Если вы еще не сделали коммит, и, похоже, у вас его нет, вы можете отменить всю работу по слиянию с hg update --clean
,
Однако в более новых Mercurial есть удобная команда для повторного объединения одного файла: hg resolve path/to/file.ext
, От hg help resolve
:
The available actions are: ... 4) discard your current attempt(s) at resolving conflicts and
перезапустите объединение с нуля: "hg resol file..." (или "-a" для всех неразрешенных файлов)
Из мерзавца, команды:
git reset --hard # reset to last commit
git clean -df # delete untracked files
равны
hg update --clean # reset to last commit
hg purge # delete untracked files
На странице руководства Gg GitConcepts объясняется, как выполнять множество действий. git
пользователи знакомы с Mercurial.
Mercurial не имеет встроенного git reset --hard
поведение. Тем не менее strip
расширение обеспечивает strip
команда, которая делает. Чтобы использовать, сначала включите strip
в вашем ~/.hgrc
файл::
[extensions]
strip =
Примечание: это расширение в новой версии Mercurial-2.8. Предыдущие версии предоставили strip
команда в mq
расширение.
Теперь вы можете запускать такие команды, как hg strip
или даже hg help strip
, Чтобы удалить набор изменений и все его дочерние элементы, просто укажите этот набор изменений в качестве аргумента hg strip
, Например, чтобы удалить последний сделанный вами коммит (после того, как вы использовали команды, вызвавшие hg rollback
чтобы сообщить, что транзакции для отката больше не выполняются), можно удалить tip
пересмотр. Каждый раз, когда вы запускаете эту команду, другая ревизия будет удалена. hg strip
действия должны считаться необратимыми; незнакомые пользователи должны сделать резервные копии своих репозиториев перед использованием.
$ hg strip tip
Например, с синтаксисом revsets я указываю, что хочу удалить все мои коммиты, которые приводят к появлению дополнительных заголовков при запуске hg heads
, Если вы указали конкретную ревизию в приведенном ниже выражении, кроме tip
все в текущей ветке, которая не является предком выбранной вами ревизии, будет обрезано. Это кажется наиболее близким к поведению, которое я хочу, когда я запускаю команду git reset --hard HEAD
,
$ hg strip "branch(tip) and not(ancestors(tip)::tip)"
Что я ожидал найти в качестве альтернативы
git reset --hard
в ртутном было:
hg strip --keep -r . # --keep optional
hg update --clean # reset to last commit
И тогда, если вам тоже нужно:
hg purge