Как отменить слияние в Mercurial?

Я допустил слияние. Я хочу вернуться, а затем повторите попытку.
Есть ли способ отменить слияние до его фиксации?

hg revert не делает того, что мне нужно, а только возвращает текст файлов. Mercurial прерывает мою вторую попытку слияния и жалуется, что исходное слияние все еще не выполнено.

Есть ли способ отменить слияние после команды hg merge, но до ее фиксации?


person deft_code    schedule 20.10.2010    source источник
comment
Возможный дубликат Как отказаться от слияния hg?   -  person Rodrigue    schedule 03.02.2016


Ответы (2)


После того, как вы сделаете hg merge, но до hg commit, ваша рабочая копия будет иметь двух родителей: первый родитель - это набор изменений, который вы обновили до слияния, а второй родитель - набор изменений, с которым вы выполняете слияние. Mercurial не позволит вам сделать hg merge снова, пока у вашей рабочей копии есть два родителя.

У вас есть два варианта действий:

  1. Если вы хотите прервать слияние и вернуться к тому, с чего начали, сделайте

    hg update -C .
    

    Это обновит рабочую копию, чтобы она соответствовала первому родителю: . всегда обозначает первого родителя рабочей копии.

  2. Если вы хотите повторно объединить несколько файлов, сделайте

    hg resolve fileA fileB
    

    Это повторно запустит инструменты слияния, как и при hg merge. Команда разрешения хороша, если в hg merge-время вы обнаружите, что ваши инструменты слияния настроены плохо: исправьте конфигурацию и запустите hg resolve --all. Вы можете запускать hg resolve сколько угодно раз, пока не будете удовлетворены слиянием.

person Martin Geisler    schedule 25.10.2010

person    schedule
comment
Просто, эффективно и, как мне кажется, лучший способ это сделать! : D - person Eric-Karl; 22.10.2010
comment
@JonL. - Да, --clean является синонимом -C. Я не уверен, к какому набору изменений . будет относиться, но это всегда будет один из двух объединенных наборов изменений. - person Omnifarious; 30.01.2012
comment
@ В общем, очистка . должна быть очищена до той ревизии, которую вы использовали до начала слияния. Итак, если бы вы были на r42, попытались слиться с r43, потерпели неудачу, очистили, вы бы вернулись на нетронутый r42. - person Jon L.; 03.02.2012
comment
hg update --clean работает, поскольку ., похоже, является неявным значением по умолчанию - это явно не задокументировано хотя. - person Joel Purra; 27.09.2012
comment
@JoelPurra: Значение . в контексте слияния довольно неоднозначно. - person Omnifarious; 27.09.2012
comment
@Omnifarious: похоже, по умолчанию используется ревизия рабочей копии, которая существовала до того, как любой другой набор изменений был merge'd in в качестве второго родителя. Достаточно хорошо для меня =) - person Joel Purra; 27.09.2012
comment
@JoelPurra: Я должен поискать в коде явное намерение. Другая возможность, которую я мог видеть, - это набор изменений по умолчанию с наименьшим или наибольшим значением хэша (который, по сути, выбирает один случайным образом). - person Omnifarious; 27.09.2012