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 次 |
| 最近记录: |