Ogni ramo ha un ruolo. La ramificazione di una funzione è buona poiché consente al ramo della caratteristica di identificare in modo specifico tale ruolo.
L'unione sempre con i valori predefiniti implica che il default sia il ruolo di mainline, accumulation e packaging - ed è qui che si verificano problemi.
Dovresti invece prendere in considerazione l'idea di creare un ramo per il ruolo di "accumulo per il rilascio" e quindi unire le tue caratteristiche nel ramo di accumulo appropriato.
C'è niente che dice che non puoi avere più rami di accumulo simultanei. Un ramo per "next target release" che ha anche il nome "2.0" (più nomi su un ramo possono rendere più semplice la comprensione dell'intento di ciascuno - sebbene possa anche rendere più complicato fare tutti gli aggiornamenti dei nomi) e poi un altro ramo per '3.0'.
Se la tua funzione non è destinata a essere in 2.0, ma è destinato a essere in 3.0, uniscilo in 3.0.
Una volta completato con il ramo di rilascio 2.0 / successivo, unire quello di nuovo in predefinito e rilasciarlo. Quindi si dirama nuovamente per il successivo ramo di rilascio da predefinito e si uniscono 3.0 nel successivo ramo di rilascio e si continua da lì.
Questo ha il vantaggio di poter costruire in modo pulito il ramo 3.0 in qualsiasi momento per vedere se ci sono problemi all'orizzonte - prima che il 2.0 venga rilasciato. Separa anche i ruoli e costruisce le politiche per ogni ramo consentendo loro di essere comprensibili.
Ulteriori letture (una delle mie preferite per quanto riguarda la ramificazione e il controllo del codice sorgente): Strategie di ramificazione avanzata di SCM . In particolare, spiega che cos'è ciascun ruolo e come lavorano insieme. Sebbene il suo focus sia per forza, può essere applicato in modo pulito a git e ad altri sistemi di controllo delle versioni distribuite. Una volta letto, dai un'occhiata a git flow e osserva come questi concetti vengono applicati modello.