Возможно это вначале покажется чутка избыточным, но по размышлению - нет:
master == прод
dev == ветка стабильной разработки, где живут более-менее целостные фичи
feature_xx == опять же целостная, самостоятельная фича, привносящая осмысленный функционал и состоящая возможно из множества задач
фичи отращиваются и возвращаются в ветку dev и их можно даже на уровне ветки протестировать
в какой-то момент от ветки dev отращивается ветка release (по-сути релиз-кандидат) и потом по выпуску (релизу) вливается в master и dev
go to 1
при таком подходе в dev живёт достаточно стабильное решение, а ветках feature - конкретные фичи, которые к моменту влития в dev - в общем-то тоже стабильны и функциональны.
ну и собственно релизный цикл получает некую "асинхронность" относительно цикла разработки:
- захотел релиз-менеджер к юбилею фирмы выпустить релиз - пожалуйста - в dev есть пачка фич
- накопилось осмысленное кол-во фич - вперёд в релиз
- оттестирована конкретная ожидаемая фича - в релиз (ну и попутно менее значимые)
сорри за слегка вольный пересказ по-сути большинства моделей ветвления гита, гитлаба, атлассиана и др.)