Wygląda na to, że masz tutaj kilka problemów:
1. Identyfikowanie funkcji dla konkretnego wydania
Jest to kwestia zarządzania projektem i kwestia koordynacji. Czy ta funkcja zostanie wydana przed, w tym samym czasie lub po tej innej funkcji? Jeśli wydania mają się pojawiać po jednej funkcji na raz, należy to zidentyfikować. Jeśli funkcje będą grupowane w wydaniach, a następnie dowiedzieć się, jakie grupy są i egzekwować je deweloperów i decydentów. Użyj systemu śledzenia problemów lub systemu biletowego, aby oznaczyć wydania. Wyjaśnij, że jeśli jedna funkcja określonego wydania jest nie do przyjęcia, to wszystkie są.
2. Strategie rozgałęziania
Git-flow jest łatwą odpowiedzią na takie problemy i często ludzie używają wariantu git-flow, nawet jeśli nie wiedzą, co to jest. Nie powiem, że to wszystko dla wszystkich problemów, ale bardzo pomaga.
Wygląda na to, że napotykasz problem z niedeterministycznymi strategiami wydawania, w których funkcje są zatwierdzone jako rozproszone, a coś, co zaczęło się rozwijać dawno temu, może zostać wydane po czymś, co zaczęło się ostatnio - funkcjach skokowych.
Długotrwałe gałęzie funkcji lub gałęzie z jednoczesnym wydaniem są prawdopodobnie najlepszą odpowiedzią na tego rodzaju problemy. Scal (lub rebase, jeśli czujesz się z tym komfortowo) najnowsze od mistrza do długoterminowych oddziałów. Uważaj, aby scalić tylko funkcje, które są już aktywne, w przeciwnym razie napotkasz problemy, które masz teraz (zbyt wiele pomieszanych funkcji w jednym oddziale).
Istotną częścią tego procesu są gałęzie „poprawki” lub „poprawki błędów”; używaj ich do małych jednorazowych poprawek, które mają krótki cykl kontroli jakości.
Z twojego opisu może być nawet lepiej nie utrzymywać oficjalnej gałęzi „rozwoju”. Zamiast tego należy rozgałęzić wszystkie funkcje z poziomu głównego i utworzyć połączone wersje wydań po zidentyfikowaniu wydania.
3. Środowiska
Nie dopasowuj gałęzi git do swoich środowisk, z wyjątkiem produkcji == master. Oddział „rozwoju” należy uznać za zepsuty. Rozgałęzienia wersji są wypychane w celu przetestowania środowisk, niezależnie od tego, czy jest to środowisko kontroli jakości czy środowisko przejściowe. W razie potrzeby wypchnij określoną gałąź funkcji do środowiska.
Jeśli masz więcej niż jedną gałąź funkcji, które muszą zostać wydane osobno, ale są testowane w tym samym czasie ..... ¯ \ _ (¯) _ / ¯ .... podkręcić inny serwer? Być może połączymy je razem w gałąź odrzucania ... zatwierdzaj poprawki / zmiany w oryginalnych gałęziach i ponownie scalaj w gałąź odrzucania; dokonać ostatecznego zatwierdzenia i UAT w poszczególnych oddziałach wydania.
4. Usuwanie niezatwierdzonych funkcji z oddziału
Właśnie tego starają się unikać powyższe myśli, ponieważ jest to bez wątpienia najbardziej bolesna rzecz do zrobienia. Jeśli masz szczęście, funkcje zostały scalone z Twoimi programistami lub przetestuj gałęzie atomowo za pomocą zatwierdzeń scalania. Jeśli masz pecha, deweloperzy zaangażowali się bezpośrednio w dział rozwoju / testowania.
Tak czy inaczej, jeśli przygotowujesz się do wydania i masz niezatwierdzone zmiany, musisz użyć Git, aby wycofać te niezatwierdzone zatwierdzenia z gałęzi wydania; najlepszym pomysłem jest zrobienie tego przed przetestowaniem wydania.
Powodzenia.