логическое объяснение структуры ветвления / слияния
Структура в основном соответствует тому, что вы сказали: ветвь интеграции и ветки функций.
В этом типе рабочего процесса, как и вы, важно понимать, что вся разработка не сможет перейти к следующему выпуску.
Но с DVCS также важно понять, какую ветку можно опубликовать и клонировать.
Этот последний пункт (публикация) будет иметь большое влияние на команды слияния
а именно:
- 1012 * Слияние *
- перебазироваться.
Всякий раз, когда разработчик должен объединить свою работу в любой ветви интеграции (он извлек из "центрального" хранилища), я бы порекомендовал:
# switch back to previous release tag (from where feature branches for next release where done)
$ git checkout previousReleaseTag
# create one's own private
$ git checkout -b myIntegrationBranch
# merge or cherry-pick what we want to actually put in the next release
$ git merge... from our feature branch
# rebase that private integration branch on top of actual integration branch
$ git rebase integrationBranch
Последняя перебазировка переписывает историю ваших локальных консолидаций, но в ветке вы все равно не будете публиковать (так что никакого вреда не будет).
Как только все ваши новые функции заработают, вы можете объединить эту частную ветку с текущей HEAD соответствующей ветки интеграции.
«Частная ветвь - слияние или выбор вишни - ребазировка - локальное разрешение - слияние назад» - это необходимый рабочий процесс, поскольку нескольким группам придется объединить свою работу с общей веткой. Им нужно воспроизвести то, что они хотят опубликовать в частной ветке, прежде чем объединить это с общей веткой, иначе каждая команда может сломать то, что представлено HEAD общей ветки.
Другие подробности в вопросах: