Это возможный поток разработки, и да, вы ищете ребаз.
Вы можете взять одобренную ветвь PB2 и перенести ее на TestMaster (при условии, что здесь и TestMaster, и master тесно связаны).
При желании вы можете объединить все изменения в один коммит.
Примечание 1: после того, как ветви PB1, PB2, PB3 объединены в DevMaster, они «спаяны» и не должны быть «объединены». Вы можете использовать DevMaster для массового тестирования, но вы должны использовать исходную ветку PB2 для TestMaster, если это ваша единица утверждения, или полностью отклонить все 3 изменения. Может быть, поэтому у вас путаница?
Примечание 2: в вашем описании я не вижу разницы между "master" и "TestMaster", потому что по сути обе ветки должны содержать утвержденные изменения, готовые для тестирования.
Альтернативный подход
У вас есть 4 этапа в процессе:
- развивается в ветви функций
- тестирование для утверждения на DevMaster
- тестирование на TestMaster
- в ожидании релиза на ProdMaster
Таким образом, вместо фиксированных веток, таких как DevMaster, TestMaster, ProdMaster, вы можете каким-то образом индексировать 3 последовательности ветвей. Например, если вы работаете над версией 55 вашего продукта, у вас могут быть DevMaster55-1, DevMaster55-2, DevMaster55-3 (для каждого раунда утверждения, если есть несколько раундов), TestMaster55 для тестирования версии 55 и ProdMaster55 (актуальный выпуск v55, который должен поступить в производство).
Преимущество этого заключается в том, что вам не нужно синхронизировать эти последовательности (например, TestMaster56 будет отделен от TestMaster55), а история изменений в каждой из этих ветвей очень чистая. На практике ProdMaster55 может быть просто тегом в ветви TestMaster55, а TestMaster55 - это «стабилизационная» ветка, которая в какой-то момент вылетела из мастера и принимает только исправления, необходимые для v55.