слияние ветки разработки с выпуском

#git #branching-and-merging

#git #разветвление и слияние

Вопрос:

Возможно, это простой вопрос для более опытных в git людей, на который можно ответить, но я уже несколько часов бьюсь над этим.

У меня есть три ветки: Develop, MyBranch amp; Release.

MyBranch расширяет Develop, и поскольку это была более длинная функция, Develop была объединена с MyBranch еще два раза. Выпуск отделен от разработки, и разработка опережает выпуск (поскольку мы все еще продолжаем работать над функциями для следующего выпуска).

Теперь я должен объединить MyBranch для разработки и выпуска. При слиянии для разработки не возникло никаких проблем, но я не был уверен насчет слияния для выпуска. Поскольку разработка была объединена с MyBranch два раза, я мог случайно объединить изменения, которые не требуются при выпуске. Что мне делать? Я подумал о:

  • Оформить заказ на новую ветку MyBranchRelease
  • Возврат двух слияний из Dev в MyBranchRelease
  • Слияние выпуска с MyBranchRelease для решения конфликтов
  • Объединить MyBranchRelease в Release

Имеет ли это смысл? Надеюсь услышать от вас, ребята

Комментарии:

1. У каждого выпуска будет отдельная ветка выпуска, такая как r1, r2 и так далее. Итак, почему вы хотите объединить свою ветку с существующей веткой выпуска? Вы должны отказаться от разработки (после объединения всех соответствующих изменений, необходимых для этого конкретного выпуска)

2. поскольку ветка выпуска должна быть стабильной, мы не хотим, чтобы все изменения, внесенные при разработке, также вносились при выпуске. в оба объединяются только выбранные и протестированные изменения, такие как MyBranch.

Ответ №1:

Итак, у вас есть:

           r--r--r (release)
         /
--d--d--d---d--d--d--d--d (Develop)
                 
             v     v
          mb--mb----mb--mb--mb--mb--mb
  

Поскольку разработка была объединена с MyBranch два раза, я мог случайно объединить изменения, которые не требуются при выпуске.

Создание тестовой ветки, как вы описали, является хорошей тактикой, за исключением того, что она включает в себя возврат слияний

Другим подходом было бы создать MyBranchRelease там, где находится MyBranch, затем перебазировать его поверх release, отбросив при этом два коммита слияния.

 git checkout MyBranch 
git checkout -b MyBranchRelease 
git rebase -i release
  

Комментарии:

1. спасибо, что заверили меня в этом. Просто чтобы уточнить перебазирование: должен ли я явно отбрасывать два слияния при перебазировании, или это делается неявно? (поскольку rebase берет корень MyBranch и устанавливает его при выпуске)

2. @JulianDm Это должно быть сделано автоматически, но дважды проверьте это.