Как мне сделать сброс настроек --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" для всех неразрешенных файлов)

Это близко:

hg update --clean

Из мерзавца, команды:

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
Другие вопросы по тегам