Исправить плохое слияние в Mercurial
-
27-10-2019 - |
Вопрос
В нашей конфигурации Mercurial Project у нас есть 3 ветви в одном хранилище. Одним из них является стабильная ветвь выпуска, где делаются срочные исправления ошибок, один из них-это филиал функций, которая содержит новый код функции, а один-это ветвь UAT, где исправлены как исправления ошибок, так и новые функции, чтобы обеспечить самую современную базу кода Анкет
Мы объединили целую нагрузку нового кода функции в филиал UAT без каких -либо проблем. После этого мы объединили стабильную ветвь с исправлением ошибки в филиале UAT, но, похоже, это влияет на удаление нового кода функции. Я обнаружил, что эта проблема была вызвана тем, что кто -то слияет UAT в стабильную стабильную (чего никогда не должно было случиться !!). Теперь, когда я пытаюсь объединить исправления ошибок в UAT, он удаляет весь новый код функции.
Есть ли способ удалить эффекты слияния из UAT в стабильную, в то же время сохраняя исправления ошибки, которые являются потомками после этого «плохого слияния»? Я попытался поддержать слияние, но, похоже, это вообще не имеет никакого эффекта. Могу ли я сделать полосу и повторно добавить необходимые смены?
Заранее спасибо.
Решение
На самом деле мне удалось исправить это самому через небольшую пробную версию и ошибку.
Сначала вам нужно включить расширения трансплантации и MQMerge в вашем файле Mercurial.ini. Добавьте линии следующие линии под заголовком расширения
transplant=
mq=
Клонировать ваш репозиторий в новое место. В вашем новом репо, удалите плохое слияние, используя команду Strip, чтобы очистить историю, эффект плохого слияния удаляется. (Остерегайтесь, что это удалит все смены потомков)
Затем вам необходимо выбрать все необходимые изменения в хронологическом порядке из другого репо, используя команду, аналогичную ниже
hg transplant -s "otherRepo" -b "branchName" "changesetHexNumber"
Повторите команду трансплантации для всех необходимых изменений. Ужи!
NB: Если вы используете центральный репозиторий, вам нужно будет лишить оскорбительного слияния/Changset там, в противном случае ваше локальное репо будет думать, что у вас есть выдающиеся смены.