При перемещении изменения в репозитории с помощью слияния речь идет о самом последнем общем предке того места, где у вас есть это изменение, и места, где вы хотите его получить.Если до внесения этого исправления ваше хранилище выглядело так:
[a]-[b]-[c]-[d]
с набором изменений с тегами 1.0, равным [b]
, то теперь у вас есть это:
[a]-[b]-[c]-[d]
\
-[e]
, где исправление находится в [e]
. Если это так, то вам просто нужно сделать это:
hg update d
hg merge e
hg commit
Тогда у вас будет это:
[a]-[b]-[c]-[d]-[f]
\ /
-[e]-----
Если на другомРука до внесения изменений, ваш репо выглядел так:
[a]-[b]-[c]-[d]
\
-[e]-[f]
, где тряпка 1,0 указала на [f]
, тогда у вас теперь есть:
[a]-[b]-[c]-[d]
\
-[e]-[f]-[g]
с исправлениемв [g]
.Если вы хотите переместить набор изменений [g]
в [d]
, не принося с собой [e]
и [f]
, хорошего способа сделать это не существует.Не очень хороший способ, доступный вам (называемый cherrypicking ), заключается в использовании команд hg export
и hg import
.
Никакой рабочий процесс не требует выбора вишни, но для его избежания требуетсянемного предусмотрительности.Во втором случае вы бы избежали этого, сделав исправление не для серии 1.0 (как потомок [f]
), а вместо этого как потомок самого последнего общего предка из двух мест, где вы хотите это изменение.Так как вы хотите это изменение как в [d]
, так и [f]
, вы ищете их последнего общего предка и видите его [b]
и вносите изменения как дочерние для этого, используя следующие команды:
hg update b
..edit..
hg commit
оставляя вас с этим графиком:
[a]-[b]-[c]-[d]
\
\--[g]
\
-[e]-[f]
это исправление, [g]
- новая голова, и вы можете объединить ее как в [d]
(2.0), так и [f]
(1.0) без какого-либо выбора вишнисовсем.Команды для этого были бы:
hg update d
hg merge g
hg commit
hg update f
hg merge g
hg commit
, и результирующий график будет выглядеть так:
[a]-[b]-[c]-[d]--[h]
\ /
\--[g]----
\ \
-[e]-[f]-[i]
, где [h]
- ваш новый 2.0 с исправлением, а [i]
- вашновая версия 1.0 с исправлением.
Резюме: вы всегда можете избежать ковыряния в вишне с помощью предвидения, но это не конец света, если вы не