Идея в том, что вы используете одну общую ветку и две (или столько, сколько вы
нужно) конкретные филиалы клиента. Все общие изменения идут в
мастер, и каждая ветвь клиента получает изменения, которые относятся только к
этот клиент. Периодически (когда считается, что мастер находится на
стабильная точка), вы будете объединять изменения от мастера к клиенту
филиал (git checkout custA; git merge master
). Это приносит в новее
«общий» код в ветке клиента. Вы никогда не будете сливать другой
способ - это загрязнит мастер с помощью кода, специфичного для клиента.
Когда вы делаете доставку клиенту А, вы оформляете заказ "custA"
ответь и отправь. И, конечно, аналогично для других клиентов.
Теперь предположим, что вы приобрели нового клиента "C", а чуть позже нашли
особенность, которую хотят клиенты A и C, но B не хочет. Вы создаете (иначе
«вилка») ветка от мастера (git checkout -b AC_feature master
),
закодируйте / протестируйте его, делая коммиты по ходу работы, а затем объединяйте их в A и C
(git checkout A; git merge AC_feature and similarly for customer C
).
Вы не кодируете его в A, а затем полагаетесь на слияние A в C, потому что
что бы получить все А в С.
Если через некоторое время вы обнаружите небольшую ошибку в этой функции, вы делаете
изменить в той же ветке (git checkout AC_feature; edit/test/commit
),
и затем вы объединяете его в custA и custC, как указано выше.