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

85

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

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

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

deft_code
источник
Возможный дубликат Как отказаться от слияния hg?
Родриг,

Ответы:

107

hg update -C <one of the two merge changesets>

Всевозможный
источник
Просто, эффективно и, как мне кажется, лучший способ это сделать! : D
Эрик-Карл
@JonL. - Да, --cleanэто синоним -C. Я не уверен, к какому набору изменений .будет относиться, но это всегда будет один из двух объединенных наборов изменений.
Omnifarious
3
@Omnifarious, очистка .должна выполняться до той ревизии, которую вы использовали до начала слияния. Итак, если бы вы были на r42, попытались слиться с r43, потерпели неудачу, очистили, вы бы вернулись на нетронутый r42.
Джон Л.
2
hg update --cleanработает, как .кажется, неявное значение по умолчанию - хотя это явно не задокументировано .
Joel Purra
@JoelPurra: Значение .в контексте слияния довольно неоднозначно.
Omnifarious
39

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

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

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

    hg update -C .
    

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

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

    hg resolve fileA fileB
    

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

Мартин Гейслер
источник