2016-07-14 2 views
0

Я сделал фиксацию слиянием, после этого я сделал резервную копию в основной ветке, чтобы вернуть последнее слияние. Через некоторое время мне нужно объединить ветку, но mercurial говорит, что прервать: слияние с рабочим каталогом предка не имеет никакого эффектаКак слить после резервного копирования Mercurial

Но в развитии ветки я не вижу изменений в другой ветке.

ответ

0

Слияние только забирает вещи, новые с момента последнего слияния. Например:

default: *------------? 
      \  /
develop:  o--o--o--o 

Каждый o представляет некоторые фиксации. Мы начали с ветви по умолчанию (с именем default) только с одним фиксатором, один из которых отмечен * вместо o. Затем мы сделали ветку develop, начиная с того же первого коммита, и сделали некоторую работу.

Как только работа была готова, мы вернулись к ветке default и использовали hg merge. Это предложило сделать новый коммит, ?. Он сделал это, обратившись к * - фиксация, которую мы имели между default и develop, и посмотрев, что мы сделали на двух ветвях, и объединив их.

Мы ничего не сделали на default, поэтому объединение было простым. Mercurial смог просто взять все, что мы сделали на develop, и поместить все это в default. Давайте заполним в слиянии, как реальный совершить прямо сейчас:

default: o------------* 
      \  /
develop:  o--o--o--o 

Обратите внимание, что я переехал *. Теперь это новое слияние. Это самая последняя фиксация, связывающая две ветви.

Между тем, hg backout совершает новую фиксацию, которая отменяет предыдущую фиксацию. В частности, вы просите вернуть слияние. Давайте нарисуем, что:

default: o------------*--u 
      \  /
develop:  o--o--o--o 

Это новое обязательство вроде как версии антивещества из слияния, с точки зрения изменений в любом случае. Все в default восходит к тому, как оно было до слияния. Поэтому я использовал письмо u (для «отменить») вместо обычного раунда o точки для более типичного фиксации.

Где последний общий фиксатор на двух ветвях? Ответ должен быть очевиден: все равно *.

Теперь вы попросите Mercurial снова слиться. Он находит изменения в develop, так как слияние-и нет. Нет новой работы для слияния!

Предположим, что мы проверяем develop снова и сделать некоторые новые фиксаций:

default: o------------*--u 
      \  /
develop:  o--o--o--o------o--o 

Теперь мы можем hg merge develop в default снова, чтобы забрать изменения из двух новых фиксаций. Но изменения вы undid, с фиксацией u (фиксация резервного копирования), все еще не выполнены.Мы только забрать изменения из новых (поскольку слияние) совершает на develop, и мы сохранить изменения, внесенные (с слияния) на default, который должен сказать, то u отменить изменения:

default: o------------o--u------* 
      \  /  /
develop:  o--o--o--o------o--o 

Если вы хотите, чтобы все эти изменения были возвращены, вы можете просто отменить резервную копию. То есть в любое время до или после добавления новых коммитов на develop, и даже до или после слияния этих новых коммитов вы можете отменить отмену. Давайте обратимся к u с ног на голову в «повторить» и посмотреть, как это выглядит, если вставить его до следующего слияния:

default: o------------o--u--n-----* 
      \  /  /
develop:  o--o--o--o--------o--o 

Другими словами, совершают u (hg backout) ун-сделал изменения из слияния. Это не так и не может, на самом деле сделать слияние не произойдет. Итак, до переустановите изменениями из слияния, вам нужно отменить отмену, что является нашим n здесь.

Смежные вопросы