Слияние запросов слияния GitLab вручную

#git #jenkins #gitlab

#git #Дженкинс #gitlab

Вопрос:

Я хочу объединить все мои существующие запросы на слияние вручную. Допустим, это мои существующие запросы на слияние:

 1) feature1 --> master
2) feature2 --> master
  

Для некоторых бизнес-требований мне нужно объединить все существующие ветви запросов на слияние с промежуточной ветвью, вызываемой integration на моем локальном сервере. И затем мне нужно объединить integration с. master. И на моей рабочей станции я делаю следующее:

 $ git clone ...
$ git fetch
$ git checkout master
$ git checkout -b integration

# Rebase feature1 with integration and merge
$ git checkout feature1
$ git rebase integration
$ git checkout integration
$ git merge feature1

# Rebase feature2 with integration and merge
$ git checkout feature2
$ git rebase integration
$ git checkout integration
$ git merge feature2

# Merge integration to master
$ git checkout master
$ git merge integration
$ git push origin master
  

Но когда я проверяю запросы на слияние в GitLab, я вижу только первый как объединенный. Второй запрос на извлечение все еще открыт, даже если слияние прошло успешно.

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

1. вручную с помощью cron … задание Ну, если это задание cron, это вряд manually ли . захват всех ожидающих запросов на слияние, объединение их Как вы выполняете слияние? Используя git merge или Gitlab API? Если это git merge так, вы отправляете слияния обратно в Gitlab?

2. Извините за вводящее в заблуждение объяснение. Есть несколько более сложных процессов, чтобы определить, какие запросы на извлечение ожидают слияния. На самом деле, эта часть не важна, вы можете забыть о задании Дженкинса и представить, что я локально переношу все ветви запросов на слияние на свою рабочую станцию и объединяю их в вызываемую ветку integration-branch . После этого я объединяюсь integration-branch master с моим локальным репозиторием. Наконец, я нажимаю integration-branch и master перехожу к GitLab. Я не использую GitLab API и не обрабатываю все эти операции только с помощью команд git (например git merge ). @phd

Ответ №1:

Перебазирование feature2 поверх интеграции, скорее всего, создает ситуацию, когда ни один из коммитов в вашей feature2 ветке не попадает в integration ветку.

Помните, что rebase не изменяет существующие коммиты, а заменяет их новыми коммит.

Попробуйте это:

 # Rebase feature2 with integration and merge
$ git checkout feature2
$ git rebase integration

# This will update your pull request so gitlab can detect the merge
$ git push origin feature2

$ git checkout integration
$ git merge feature2
  

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

1. Спасибо. Это правильный ответ. К сожалению, попробовав ваше решение, я обнаружил еще одну проблему в своем дизайне. Слияние feature1 и feature2 integration происходит параллельно в двух разных заданиях Дженкинса. Из-за этого, когда я перебазируюсь feature2 в ветку интеграции, feature1 коммиты могут еще не находиться в ветке интеграции. Но, конечно, это уже другая история, и ваш ответ определенно отвечает на мой первый вопрос. Спасибо.