Gau*_*ani 5 git merge git-merge
我目前有一个 master 分支,出于这个问题的目的,我们将其称为“分支 A”。我想开发一个基于我在分支 A 中编写的代码的新功能,但它是一个重要的功能,所以我想创建一个新分支。我们称这个新分支为“分支 B”。我现在需要开始在分支 B 上工作,但分支 A 将在创建分支 B 之后但在分支 B 完成之前的某个时刻合并到 master。有没有办法做到这一点,以便保留分支层次结构?这是我想要的可视化:
合并前:
_______ master
\________ branch A
\________ branch B
Run Code Online (Sandbox Code Playgroud)
合并后:
_______ master (with branch A merged)
\_______ branch B
Run Code Online (Sandbox Code Playgroud)
我基本上希望我的分支结构保持完整,但向上移动一个级别。
这是我不想发生的事情:
合并前:
_______ master
\________ branch A
\________ branch B
Run Code Online (Sandbox Code Playgroud)
合并后:
_______ master (with both branch A and branch B merged)
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
是的,它可以很容易地完成,因为它是这里的合并原则。
该怎么办?
只是合并branchA
到master
,branchB
将不在此合并的范围内。
git checkout master
git merge branchA
Run Code Online (Sandbox Code Playgroud)
为什么?
Git 将搜索这两者之间的合并基础(它们共享的最近提交),然后将master
每个提交应用到接收端(此处)中存在的每个提交(此处branchA
)master
没有。
让我们想象一个更详细的例子:
C1-<-C2-<-C3-<-C4 <<< master
\
\
C5-<-C6-<-C7-<-C8 <<< branchA
\
\
C9-<-C10 <<< branchB
Run Code Online (Sandbox Code Playgroud)
当您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
Run Code Online (Sandbox Code Playgroud)
您可以或不可以branchA
在合并后处理您的,但无论如何 master 将包含*每个提交但C9
和C10
。(C11
是合并提交。)
并且您将能够继续工作,branchB
然后master
在将来的某个时刻将其合并(或不合并)。
* (有些人更喜欢用这个比喻来概念化分支,但从技术上讲,这只是意味着所有这些提交都可以从分支尖端通过父关系访问)
归档时间: |
|
查看次数: |
1277 次 |
最近记录: |