Non vedo il problema qui.
Lo hai già ogni volta con il tuo ramo master , che continua a cambiare mentre le funzionalità vengono sviluppate e quindi unite.
Quindi, nel tuo esempio concreto, devi prima creare il ramo feature_xxx_backend e sviluppare le modifiche del backend. Al termine, il ramo deve essere esaminato e verrà unito in master una volta completata la revisione.
Quindi, avvia semplicemente un altro ramo, feature_yyy_frontend . Probabilmente vorrai diramarti direttamente da feature_xxx_backend , in modo che tu abbia già quelle modifiche nel tuo branc. quindi semplicemente sviluppa la funzione di frontend asif il ramo erano master .
Quando il ramo feature_xxx_backend cambia, ad es. perché ci sono cose che emergono durante la revisione che devono essere indirizzate, semplicemente fai queste modifiche e uniscile nel ramo feature_yyy_frontend . Quindi continua sul ramo di frontend.
Una volta completata la revisione del ramo back-end, viene unita in master . A questo punto, sarebbe opportuno rebase il ramo feature_yyy_frontend su master , in modo che i revisori debbano solo rivedere le nuove modifiche che questo ramo contribuisce a master , e non è necessario riesaminare le modifiche apportate per il back-end (che sono già state approvate).
Questo può essere fatto anche quando hai due, tre o più rami dipendenti. Se si dispone di due diramazioni da cui si dipende, è sufficiente creare un ramo derivato in cui entrambe le funzioni sono unite. Filiale da lì, sviluppare la terza funzione, unire entrambi i rami delle caratteristiche lungo il percorso quando ognuno di questi cambia. Quando entrambe le funzioni sono state completate e integrate nel ramo derivato, rebase su quello, o se vengono unite in master, rebase su master.
Rebasing (come suggerito sopra) è davvero potente e aiuta a mantenere un registro pulito delle modifiche, rendendo le recensioni molto più semplici.