Как создавать релизы на мастере, используя сжатые слияния - PullRequest
0 голосов
/ 11 мая 2019

Мы используем стратегию ветки master / staging / feature.master и staging являются долгоживущими, а ветви функций существуют только до слияния с staging.

При слиянии staging и master наш сервер jenkins уничтожает коммиты, чтобы создать один «release» коммит в master, помеченный версией.

К сожалению, некоторые изменения пропущены, т. Е. Файлы, удаленные в ветви объектов, все еще присутствуют в master.

Мы хотим, чтобы у staging была вся история коммитов, а у master - только одинкоммит, который помечен номером релиза.

Я знаю, что проблема заключается в подавлении коммитов и отсутствии общей истории, мой вопрос заключается в том, как добиться единого коммита на мастере с помощью поэтапногополная история автоматически (это должно происходить на сервере jenkins).

Я посмотрел на rebase, но не могу понять, может ли он делать то, что мы хотим автоматически (это должно происходить на сервере jenkins без ручного вмешательства).

1 Ответ

0 голосов
/ 11 мая 2019

Вы можете использовать reset --soft для достижения этого, чтобы ветви были «одинаковыми».Итак, вы сделали свой последний релиз на мастере (на этом этапе постановка и мастер "одинаковы").Затем происходит 1000 коммитов в функциональных ветвях и сливается с подготовкой.В этот момент вы хотите снова разблокировать мастер:

git checkout --detach staging
git reset --soft master # here is where the magic happens... all changes between master and staging are placed on index, branch pointer is set to master
git commit -m "New release" # if you want to have a more detailed comment, find the way to do it.
git branch -f master # move master pointer to new revision
git tag blahblah # tag revision or take it from here and do whatever you need

без слияния.к концу процесса ветви будут идентичны .

...