Все зависит от общего процесса разработки программного обеспечения. Управление конфигурацией и то, как появляется новая версия, невозможно определить, не зная об общем процессе.
Есть «гибкая» фракция, которая выберет «всегда работающую область первого коммита». Они будут постоянно запускать автоматизированные средства сборки и тестирования в этой области и пытаться иметь работающую систему "всегда".
Они сочли бы (master) -> (release) с организацией промежуточных шагов, возможно, 1,2.
Кроме того, существует более «классическая» фракция, которая имеет процесс, управляемый планированием и запланированными шагами интеграции в направлении этапов, где выпуск «единицы работы» - это запланированная операция с такими требованиями, как «только выпуск, когда она (единица) протестирована». и должен соответствовать следующему запланированному этапу ». Там планирование включает управление версиями «единиц работы», и обычно они идут на все, чтобы определить, как должен выглядеть следующий запланированный выпуск продукта с точки зрения функций и исправлений. Ради планирования они хотят знать, что то, что выпускает разработчик, является «правильным» и осознанным актом совершения единицы работы.
Этот классический подход не обязательно означает, что существуют более длительные периоды, когда нет полной сборки продукта.
Таким образом, «классический» рабочий процесс будет: (dev) -> (unit) -> (интегрирование) -> (test / qa) -> (production).
Роль интегратора заключается в том, чтобы «принимать / покупать» выпущенные блоки или отклонять их, если они не соответствуют потребностям следующего следующего выпуска.
Кроме того, можно отметить, что эти 2 основных подхода можно смешать подходящими способами.
Исходя из моего опыта (который был в основном связан с использованием «классического» подхода), «классический» подход неплохо работал в проектах из примерно 4-50 человек в команде.