Отменить неправильное слияние с Bazaar

У меня возникла проблема при использовании Bazaar, и я хотел бы получить рекомендации по ее устранению. Вот контекст:

В стволе нашего проекта один ошибочно слил ветку (BranchA) в стволе, но он использовал откат для большинства файлов, сохраняя при этом информацию о слиянии (поэтому из базара BranchA было эффективно слито в стволе, что не позволяло ДЕЙСТВИТЕЛЬНО объедините его позже).
Объединенная ревизия была зафиксирована как r4.

После этого (нежелательного) слияния многие разработчики сделали это сразу после (r5 и r6).

Итак, мой вопрос: как отменить это неправильное слияние? (с сохранением коммитов после).

Я попытался вернуться к r3 и объединить каждую ревизию от r4 до R6 (исключая r4)
Я пробовал 'обратный выбор вишни' r4 ... но информация о слиянии BranchA все еще может быть запомнена.

trunk
  |
  r6
  |
  r5
  |    branchA
  |     |
  r4 ---+
  |     |
  |    r2.2
  |     |
  r3   r2.1
  |     |
  r2 ---+
  |
  r1

Если у вас есть решение или подсказка, как его исправить, поделитесь им!
(например, может ли здесь помочь команда REBASE?)


person TridenT    schedule 16.06.2014    source источник


Ответы (1)


Поскольку информация была потеряна из-за откатов в слиянии, которое пошло не так, 100% исправления не будет. Лучше всего создать новую ветку от r3 в trunk и выбрать вишню r5 и r6, например:

cd /path/to/repo
bzr branch trunk -r3 branchX
cd branchX
bzr merge -c5 ../trunk
bzr commit -m "cherry picked r5: $(bzr log --line -r5 ../trunk)"
bzr merge -c6 ../trunk
bzr commit -m "cherry picked r6: $(bzr log --line -r6 ../trunk)"

Или, прежде чем собирать вишню r5, вы можете слить с branchA "правильным путем".

Команда rebase здесь вам не поможет. Цель перебазирования в основном состоит в том, чтобы переупорядочить ревизии: независимо от того, объединяете ли вы или перебазируете, вы получаете одно и то же содержимое в файлах, только график истории ревизий будет иметь другую форму. Цель перебазирования обычно состоит в том, чтобы сделать график истории плоским, что может быть аккуратным, но это всего лишь косметика, с точки зрения содержания конечный результат такой же.

person janos    schedule 25.06.2014
comment
Вот что у меня получилось! Я сделал вилку из r3, объединил выбранные r5 и r6 и поместил результат в ствол (так что новый ствол). Разработчики теперь должны вытащить новый ствол в свою рабочую копию, потому что bazaar предупредит о расходящихся ветвях, если они попытаются выполнить фиксацию. - person TridenT; 26.06.2014
comment
Если вы не хотите воссоздавать фиксированный trunk таким образом, то лучше отменить ревизию слияния с вишневым выбором с помощью bzr merge . -r 4..3. Но, как вы отметили, это сохранит историю слияния BranchA, что означает, что вы не сможете снова надежно выполнить слияние из BranchA. Боюсь, вам придется выбрать между этими двумя вариантами менее плохой исход. - person janos; 27.06.2014