Отмена эффекта слияния «Отменить все изменения» - PullRequest
4 голосов
/ 03 мая 2011

Предположим, что было выполнено слияние с опцией "Отменить все изменения из слияния ...", но случайно.

И этот неверный коммит был помещен в «центральный» репозиторий.

Как справиться с этим делом, если мне нужно для правильного слияния с изменением ветви?

Команды для воспроизведения регистра:

hg init mr
cd mr

echo "123" > file.txt
hg add
hg ci -m "initial"

hg branch br
echo "234" >> file.txt
hg ci -m "in branch"

hg up default
echo "567" >> file.txt
hg ci -m "in default"

После этих команд откройте tortoisehg и объедините 2-ю ревизию (заголовок по умолчанию) с веткой br с опцией «Discard ...».

UPD

Это вопрос об обратном Как объединить, чтобы избавиться от головы с командной строкой Mercurial, как я могу сделать с TortoiseHg? ; -)

Но все еще не могу найти, как отменить этот шаг: - (

1 Ответ

2 голосов
/ 03 мая 2011

Один из способов состоит в том, чтобы повторить слияние и сделать еще одно слияние с отбрасыванием.

В вашем примере обновите обратно до 2-й ревизии (текущего родителя рабочего каталога до того, как вы произвели неудачное слияние),затем повторите объединение с этой другой веткой.Сделайте это правильно в этот раз.

Это даст вам еще одну голову.

Затем объединитесь со старым, неправильным объединением и выберите сброс на этом.Теперь вы эффективно обошли это слияние с правильным.

Если вы не уверены в шагах, сделайте локальный клон и поэкспериментируйте, вы всегда можете просто отказаться от него, откатиться и попробовать снова.

Редакция 3 - это старое неправильное слияние, где я выбрал сброс.После выполнения слияния 4 и 5 следы этого слияния исчезли, и все вернулось в рабочее состояние.Да, история выглядит немного странно, но, поверьте мне, процедуры очистки, чтобы полностью избавиться от этого плохого слияния, намного хуже, чем маленький всплеск на вашей временной шкале истории.

В основном, у вас есть этот сценарий после неудачногоmerge:

            +-- botched merge
            v
    0---2---3
     \     /
      1---+

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

            +-- botched merge
            v
    0---2---3
     \   \ /
      \   x
       1-+-4
           ^
           +-- good merge

Ваша рабочая папка теперь в редакции 4, поэтому вы делаете еще одно объединение, на этот раз с редакцией 3 (неправильное объединение), и выбираете отменить эти изменения, иВы получаете это:

            +-- botched merge
            v
    0---2---3-5  <-- final merge, discard 3
     \   \ / /
      \   x /
       1-+-4
           ^
           +-- good merge

Вот как TortoiseHg показывает это:

history after new merges

...