Хорошо. Исходя из этого, вот моя рекомендация высокого уровня.
Так как это разные продукты, вы можете использовать подход «ответвления от продукта» При таком подходе вы получите:
MAIN - базовый код.
BugFix -ответвление от основного. (Здесь могут появиться общие исправления ошибок)
Продукт А - Ответвление от основного.
Продукт B - Ответвление от основного.
Я бы тогда порекомендовал ветку "Dev", разветвленную от каждой ветки Bugfix, Product A и Product B (только для хорошей практики SCM)
Большая часть вашей работы будет выполняться в ваших отраслях. Если необходимо исправить ошибку, идеальным решением будет написать код и протестировать его в ветке BugFix. После того, как он был сертифицирован для работы с «корневым» кодом, вы должны объединить это исправление с MAIN, а затем слить его с продуктом A и продуктом B.
В менее идеальной ситуации, если ошибка была исправлена в Продукте A и должна была быть отражена в Продукте B, вы могли бы объединить только этот код из Продукта A в MAIN, затем из MAIN в Продукт B и BugFix. Имейте в виду, что это опасный подход, поскольку вы можете непреднамеренно объединить функции из продукта A в продукт B.