Es hängt alles vom gesamten Softwareentwicklungsprozess ab. Das Konfigurationsmanagement und die Entstehung einer neuen Version können nicht definiert werden, ohne den Gesamtprozess zu kennen.
Es gibt die "agile" Fraktion, die sich für einen "immer funktionierenden First Commit-Bereich" entscheiden würde. Sie würden ständig automatisierte Bau- und Testeinrichtungen in diesem Bereich betreiben und versuchen, "jederzeit" ein funktionierendes System zu haben.
Sie würden die (Master) -> (Release) mit vielleicht 1,2 Zwischenschritten Organisation als vorteilhaft ansehen.
Dann gibt es die eher "klassische" Fraktion, deren Prozess von der Planung und den geplanten Integrationsschritten in Richtung Meilensteine getrieben wird. Dabei ist eine "Arbeitseinheitenfreigabe" eine geplante Aktivität mit Anforderungen wie "Nur freigeben, wenn sie (Einheiten-) getestet wird." und soll zum nächsten geplanten Meilenstein passen ". Dort umfasst die Planung die Versionierung von "Arbeitseinheiten", und in der Regel werden sie so bemessen, dass definiert wird, wie die nächste geplante Produktversion in Bezug auf Funktionen und Fehlerbehebungen aussehen soll. Zum Zwecke der Planung möchten sie wissen, dass das, was ein Entwickler veröffentlicht, "richtig" und ein bewusster Akt des Festlegens einer Arbeitseinheit ist.
Dieser klassische Ansatz bedeutet nicht zwangsläufig, dass es längere Zeiten gibt, in denen keine vollständige Produkterstellung verfügbar ist.
Der "klassische" Workflow wäre also: (dev) -> (unit) -> (integration) -> (test / qa) -> (production).
Die Rolle des Integrators besteht darin, freigegebene Einheiten zu "akzeptieren / kaufen" oder abzulehnen, wenn sie nicht den Anforderungen des nächsten Releases entsprechen.
Nebenbei bemerkt ist es auch möglich, diese beiden grundlegenden Ansätze auf geeignete Weise zu mischen.
Aus meiner Erfahrung (die hauptsächlich im Bereich der Verwendung des "klassischen" Ansatzes lag) funktionierte der "klassische" Ansatz in Projekten von etwa 4-50 Personen in einem Team recht gut.