Es hört sich so an, als hätten Sie hier ein paar Probleme:
1. Identifizieren von Funktionen für eine bestimmte Version
Dies ist ein Projektmanagement- und ein Koordinationsproblem. Wird diese Funktion vor, zur gleichen Zeit oder nach dieser anderen Funktion veröffentlicht? Wenn Releases jeweils für ein Feature durchgeführt werden sollen, geben Sie dies an. Wenn Features in Releases gruppiert werden sollen, ermitteln Sie die Gruppierungen und erzwingen Sie sie mit den Entwicklern und Entscheidungsträgern durch. Verwenden Sie Ihr Issue-Tracking- oder Ticketing-System, um Releases zu kennzeichnen. Stellen Sie klar, dass alle von ihnen ein No-Go-Feature einer bestimmten Version sind.
2. Verzweigungsstrategien
Git-Flow ist die einfache Antwort auf solche Probleme. Oft wird eine Variante von Git-Flow verwendet, auch wenn man nicht weiß, was es ist. Ich werde nicht sagen, dass es ein Allheilmittel für alle Probleme ist, aber es hilft sehr.
Es hört sich so an, als stoßen Sie auf ein Problem mit nicht-deterministischen Release-Strategien, bei denen Features als Scattershot eingestuft werden und etwas, das vor langer Zeit mit der Entwicklung begonnen hat, möglicherweise nach etwas veröffentlicht wird, das in jüngerer Zeit begonnen hat - leap-frog-Features.
Langlebige Feature-Zweige oder Zweige mit gleichzeitiger Veröffentlichung sind wahrscheinlich die beste Antwort auf diese Art von Problemen. Führen Sie das Neueste von Master in Ihren langjährigen Filialen zusammen (oder bündeln Sie es, wenn Sie damit vertraut sind) . Achten Sie darauf, nur Features zusammenzuführen, die bereits aktiv sind, da Sie sonst auf die Probleme stoßen, die Sie jetzt haben (zu viele vermischte Features in einem Zweig).
"Hotfix" - oder "Bugfix" -Zweige sind ein wesentlicher Bestandteil dieses Prozesses. Verwenden Sie sie für kleine, einmalige Korrekturen mit einem kurzen QS-Zyklus.
Ihrer Beschreibung nach ist es möglicherweise sogar besser, keinen offiziellen Entwicklungszweig zu unterhalten. Verzweigen Sie stattdessen alle Features vom Master und erstellen Sie zusammengeführte Release-Zweige, sobald ein Release identifiziert wurde.
3. Umgebungen
Ordnen Sie Git-Zweige nicht Ihren Umgebungen zu, mit Ausnahme von Production == Master. Der Zweig "Entwicklung" sollte als gebrochen angenommen werden. Release-Zweige werden an Testumgebungen weitergeleitet, unabhängig davon, ob es sich um eine QS-Umgebung oder eine Staging-Umgebung handelt. Wenn nötig, verschieben Sie einen bestimmten Feature-Zweig in eine Umgebung.
Wenn Sie mehr als einen Feature-Zweig haben, der separat freigegeben werden muss, aber gleichzeitig getestet wird ..... ¯ \ _ (ツ) _ / ¯ .... einen anderen Server hochfahren? Führen Sie sie möglicherweise zu einem Wegwerfzweig zusammen. Übernehmen Sie Korrekturen / Änderungen an den ursprünglichen Zweigen und führen Sie sie erneut zum Wegwerfzweig zusammen. Führen Sie die endgültige Genehmigung und UAT für einzelne Release-Zweige durch.
4. Entfernen von nicht genehmigten Features aus einer Zweigstelle
Dies ist, was die obigen Gedanken zu vermeiden versuchen, denn dies ist zweifellos die schmerzhafteste Sache, die zu versuchen und zu tun ist. Wenn Sie Glück haben, wurden Features mithilfe von Merge-Commits atomar in Ihre Entwicklungs- oder Testzweige integriert. Wenn Sie Pech haben, haben sich Entwickler direkt an die Entwicklungs- / Testbranche gewandt.
Wenn Sie sich auf ein Release vorbereiten und nicht genehmigte Änderungen haben, müssen Sie Git verwenden, um diese nicht genehmigten Commits aus dem Release-Zweig zu entfernen. Die beste Idee ist, dies vor dem Testen der Version zu tun .
Viel Glück.