Слияние только забирает вещи, новые с момента последнего слияния. Например:
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
здесь.