Как объединить две ветви в Mercurial, когда объединять нечего - PullRequest
31 голосов
/ 18 апреля 2011

Я новичок в Mercurial и пытаюсь сделать что-то действительно простое, но не могу понять, как это сделать. Я создал ветку, чтобы провести некоторые эксперименты, не нарушая основную ветвь.

trunk       A -- B -- C
                       \
experiment              D -- E -- F

Мне нравится, как прошел эксперимент, и я хочу объединить его со стволом и получить

trunk       A -- B -- C -- D -- E -- F

Однако, поскольку ничего не изменилось в ветви 'trunk', слияние говорит, что объединять нечего, что достаточно справедливо. Мне просто нужно закончить одну ветку под названием «ствол». Как я могу это сделать?

Ответы [ 2 ]

65 голосов
/ 18 апреля 2011

Слияние в Mercurial всегда работает следующим образом:

  1. Обновление до одной из ветвей (см. Примечания ниже, почему вы хотите выбрать одну или другую, а не просто выбрать случайную ветку)
  2. Объединение с другой веткой

Например, в вашем случае вы должны сделать:

hg update trunk
hg merge experiment

Выбор правильной ветви для обновления до

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

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

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

Это важно учитывать при размышлении о том, почему вы объединяетесь.Вы объединяете эксперимент в транк или обновляете эксперимент другими изменениями, произошедшими в транке.

Что касается закладок, то в более новых версиях Mercurial закладки являются неотъемлемой частью, и если вы обновляете доДобавьте в закладки, скажем так:

hg update moving-target

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

В соответствии с этим, если у вас есть закладка с именем moving-target в начале ветви ствола, и вы обновитесь до этой закладки, набор изменений слияния при его фиксации будет перемещен.эта закладка вперед.

13 голосов
/ 18 апреля 2011

После того как вы создали ветку, вы не можете точно достичь одной ветви по умолчанию (с некоторыми исключениями, см. Ниже). Тем не менее, вы должны иметь возможность объединить experiment в default и добиться того же.

Если вы начнете с этого:

enter image description here

и выполните это:

hg update trunk
hg merge experiment

вы должны получить следующее:

enter image description here

Другие опции:

Используя rebase или очередь исправлений , вы можете фактически переместить наборы изменений в ветви experiment обратно в default. Это в основном удалит именованную ветку experiment и создаст еще несколько default наборов изменений. Однако этого нельзя сделать, если вы уже поделились наборами изменений из первого изображения выше, с другим пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...