Git / Gitlab Flow Workflow - PullRequest
       12

Git / Gitlab Flow Workflow

1 голос
/ 03 апреля 2019

В нашем проекте есть следующие филиалы:

  • Мастер
  • предсерийный
  • Производство

Мы используем такие ветки, как feature / myfeature-123, для разработки новой функции. Если они сделаны, мы объединяем их в мастера. Через некоторое время, когда достаточно функций уже сделано и успешно объединено в master, мы развернем наш проект для подготовки к выпуску. Для этого нам нужно объединить последние изменения в ветку предпроизводства.

Примечание: за это время ничего не изменилось в ветке подготовки производства

И вот наша проблема: Мы сталкиваемся со многими конфликтами слияний. Тогда я подумал, хорошо. Давайте исправим это вручную. Я сделал следующее:

  1. Оформить заказ на подготовку производства
  2. (просто чтобы быть в безопасности) Вытащить последние изменения в этой ветке (не было)
  3. Создать новую ветку из текущей ветки, в которой я нахожусь. Имя: развертывание-апрель2019
  4. Перешел на эту новую ветку
  5. git pull origin master для получения текущего состояния из master в эту ветвь.

Как указано выше, мы сталкиваемся с множеством конфликтов слияния. Поскольку мы ничего не меняли в ветке предпроизводства, я хотел принять все изменения, которые были сделаны в ветке master. Это должно исправить все конфликты.

Это сработало, НО в основной ветке мы удалили несколько файлов / строк, которые также были в подготовительной ветке. Я бы ожидал, что эти удаленные файлы / удаленные строки будут также применены к подготовительной ветке. Но это был не тот случай. Они остались в отделе подготовки производства. Есть идеи, что делать, чтобы решить эту проблему?

Я не самый большой эксперт в этом. У меня есть общее представление о Git, но я все еще боюсь сломать вещи, выполняя неправильные команды. Я думал, что rebase может помочь здесь, но я не знаю.

Я очень благодарен за любую помощь, которую вы можете оказать.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Было бы неплохо вернуть preproduction в соответствие с master. Вы можете сделать следующее:

git log --oneline master..preproduction

Чтобы перечислить 9 коммитов только в подготовительном производстве.

Затем сбросьте preproduction в состояние master:

git checkout preproduction
git reset --hard master

Наконец, верните к предварительному производству любой из 9 коммитов, перечисленных выше, в которых вы заинтересованы:

git cherry-pick <commit-hash>

Затем вам придется принудительно оттолкнуть preproduction, поскольку он отклонится от начала координат.

Это приведет его в соответствие с master. В идеале, однако, вы не захотите делать коммит только в preproduction, так как в будущем может быть легко протолкнуть его с последним мастером.

0 голосов
/ 03 апреля 2019

Если вы уверены, что этот мастер является источником истины и является своего рода fast-forward (!). Вы можете просто слиться, принимая от Учителя. Это может быть сделано с помощью работы, например в Дженкинс / Трэвис / CI.

Добавьте опцию -X к их. Например:

git fetch --all  --prune
git checkout preproduction
git merge -X theirs origin master

Все слится желаемым образом.

Есть ли "их" версия "git merge -s ours"?

Преимущество этого подхода заключается в том, что вы все еще сохраняете историю коммитов.

...