Исправлена ошибка слияния в Mercurial
В нашей конфигурации проекта Mercurial у нас есть 3 ветви в одном репозитории. Одна из них - это ветка стабильного выпуска, в которой выполняются срочные исправления ошибок, другая - ветка функций, содержащая новый код функции, а другая - ветка UAT, в которой исправления ошибок и новые функции объединены для обеспечения самой современной базы кода.,
Мы объединили целую загрузку нового кода функции в ветку UAT без каких-либо проблем. После этого мы объединили стабильную ветвь с исправлениями ошибок в ветку UAT, но это, похоже, приводит к удалению нового кода функции. Я обнаружил, что эта проблема была вызвана тем, что какое-то время назад кто-то сливал UAT в стабильный (чего не должно было случиться!!). Теперь, когда я пытаюсь объединить исправления ошибок в UAT, он удаляет весь новый код функции.
Есть ли способ убрать эффекты слияния из UAT в стабильный, сохранив при этом исправления ошибок, которые являются потомками после этого "плохого слияния"? Я попытался отказаться от слияния, но, похоже, это никак не отразилось. Могу ли я сделать полосу и заново добавить необходимые наборы изменений обратно?
Заранее спасибо.
1 ответ
На самом деле мне удалось исправить это самому путем проб и ошибок.
Сначала вам нужно включить расширения трансплантата и mqMerge в вашем файле mercurial.ini. Добавьте строки после строк под заголовком расширения
transplant=
mq=
Клонируйте свой репозиторий на новое место. В вашем новом репо удалите неудачное слияние с помощью команды strip, чтобы очистить историю, и эффект неудачного слияния будет удален. (Помните, что это удалит все потомки изменений)
Затем вам нужно выбрать все необходимые наборы изменений в хронологическом порядке из другого репо с помощью команды, аналогичной приведенной ниже.
hg transplant -s "otherRepo" -b "branchName" "changesetHexNumber"
Повторите команду трансплантации для всех необходимых наборов изменений. Ouila!
NB. Если вы используете центральный репозиторий, вам нужно будет также удалить поврежденное слияние / смену, иначе ваше локальное хранилище сочтет, что у вас есть выдающиеся наборы изменений.