Да , это можно сделать очень легко, поскольку здесь действует принцип слияния в действии.
Что делать?
Просто объедините branchA
с master
, branchB
останется за рамками этого слияния.
git checkout master
git merge branchA
Почему?
Git будет искать базу слияния между этими двумя (самый последний коммит, который они разделяют), а затем применяет к получающему концу (здесь master
) каждый коммит, присутствующий в передающем конце (здесь branchA
), который master
не имеет.
Давайте представим вам более подробный пример:
C1-<-C2-<-C3-<-C4 <<< master
\
\
C5-<-C6-<-C7-<-C8 <<< branchA
\
\
C9-<-C10 <<< branchB
Когда вы делаете git merge branchA
из вашей ветви master
, git определит, что база слияния между этими двумя ветвями равна C2
. Затем он обнаружит C5
, C6
, C7
и C8
как коммиты, отсутствующие в master
, но присутствующие в branchA
. C9
и C10
не имеют причин для включения, так как они недоступны с branchA
.
Ситуация после
C1-<-C2-<-C3-<-C4-<--------C11 <<< master
\ /
\ /
C5-<-C6-<-C7-<-C8 <<< branchA
\
\
C9-<-C10 <<< branchB
Вы можете или не можете распоряжаться своим branchA
после слияния, но в любом случае мастер будет «содержать» * каждый коммит, кроме C9
и C10
. (C11
- коммит слияния.)
И вы сможете продолжить работу над branchB
, а затем объединить его с master
(или нет, если на то пошло) в какой-то момент в будущем.
* (некоторые люди предпочитают эту метафору для концептуализации ветвей, но технически это просто означает, что все эти коммиты достижимы из кончика ветви через родительское отношение)