Подтвердить что ты не робот

Как я git reset --hard HEAD на Mercurial?

Я пользователь Git, пытающийся использовать Mercurial.

Вот что произошло: я сделал hg backout в наборе изменений, который хотел вернуть. Это создало новую голову, поэтому hg поручил мне объединиться (я полагаю, вернусь к "умолчанию" ). После слияния он сказал мне, что мне еще нужно совершить. Затем я заметил что-то, что я сделал не так, когда разрешаю конфликт в слиянии, и решил, что хочу иметь все, что и раньше, hg backout, то есть я хочу, чтобы это неустановленное слияние исчезло. В Git этот бесподобный материал будет в индексе, и я просто сделаю git reset --hard HEAD, чтобы стереть его, но из того, что я прочитал, индекс не существует в Mercurial. Итак, как я могу отказаться от этого?

4b9b3361

Ответ 1

Если вы еще не совершили ошибку, и похоже, что вы не можете отменить все операции слияния с помощью 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 resolve file..." (или "-a" для всех          неразрешенные файлы)

Ответ 2

Это близко:

hg update --clean

Ответ 3

На странице Hg Manuals 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 команду git reset --hard HEAD.

$ hg strip "branch(tip) and not(ancestors(tip)::tip)"

Ответ 4

Из git команды:

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