#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
коммиты могут еще не находиться в ветке интеграции. Но, конечно, это уже другая история, и ваш ответ определенно отвечает на мой первый вопрос. Спасибо.