Todo depende del proceso general de desarrollo de software. La gestión de la configuración y cómo se crea una nueva versión no se puede definir sin conocer el proceso general.
Existe la facción "ágil" que optaría por un "área de primer compromiso siempre trabajando". Ejecutarían instalaciones automatizadas de construcción y prueba constantemente en esa área e intentarían tener un sistema de trabajo "en todo momento".
Verían el (maestro) -> (lanzamiento) con quizás una organización de 1,2 pasos intermedios como beneficioso.
Luego está la facción más "clásica", que tiene un proceso impulsado por la planificación y los pasos de integración planificados hacia los hitos, donde un lanzamiento de "unidad de trabajo" es una actividad planificada con requisitos tales como "solo lanzamiento cuando se prueba (unidad) y se supone que encaja con el próximo hito planeado ". Allí, la planificación comprende el control de versiones de "unidades de trabajo" y, por lo general, hacen todo lo posible para definir cómo se supone que será la próxima versión planificada del producto en términos de características y correcciones. En aras de la planificación, quieren saber que lo que un desarrollador lanza es "adecuado" y un acto consciente de cometer una unidad de trabajo.
Ese enfoque clásico no significa necesariamente que haya tiempos más largos en los que no haya disponible una compilación completa del producto.
Entonces, el flujo de trabajo "clásico" sería: (dev) -> (unit) -> (integración) -> (prueba / qa) -> (producción).
El rol del integrador es "aceptar / comprar" unidades lanzadas o rechazarlas si no se ajustan a las necesidades del próximo lanzamiento.
Es, en una nota al margen, también posible mezclar esos 2 enfoques básicos de manera oportuna.
Según mi experiencia (que era principalmente en el área del uso del enfoque "clásico"), el enfoque "clásico" funcionó decentemente bien en proyectos de aproximadamente 4-50 personas en un equipo.