git 操作分支合并 merge和rebase的图文详解
2018-03-20 00:17
483 查看
1.分支的合并概述
2.merge
2.1 简单分支merge
2.2 多人merge分支
3.rebase
3.总结
4.实际应用结合
5.五类主要分支
5.1 主分支
5.2 feature分支
5.3 release分支
5.4 hotfix分支
6.项目实际效果
最简单的操作,如下图所示,仅有bugfix一个分支是从master分支分叉出来的。
合并 bugfix分支到master分支时,如果master分支的状态没有被更改过,那么这个合并是非常简单的。 bugfix分支的历史记录包含master分支所有的历史记录,所以通过把master分支的位置移动到bugfix的最新分支上,Git 就会合并。这样的合并被称为fast-forward(快进)合并。
因此,合并两个修改会生成一个提交。这时,master分支的HEAD会移动到该提交上。
执行合并时,如果设定了non fast-forward选项,即使在能够fast-forward合并的情况下也会生成新的提交并合并。
执行non fast-forward后,分支会维持原状。那么要查明在这个分支里的操作就很容易了。
如果使用rebase方法进行分支合并,会出现下图所显示的历史记录。现在我们来简单地讲解一下合并的流程吧。
首先,rebase bugfix分支到master分支, bugfix分支的历史记录会添加在master分支的后面。如图所示,历史记录成一条线,相当整洁。
这时移动提交X和Y有可能会发生冲突,所以需要修改各自的提交时发生冲突的部分。
rebase之后,master的HEAD位置不变。因此,要合并master分支和bugfix分支,即是将master的HEAD移动到bugfix的HEAD这里。
merge
保持修改内容的历史记录,但是历史记录会很复杂。
rebase
历史记录简单,是在原有提交的基础上将差异内容反映进去。
因此,可能导致原本的提交内容无法正常运行。
您可以根据开发团队的需要分别使用merge和rebase。
例如,想简化历史记录,
在topic分支中更新merge分支的最新代码,请使用rebase。
向merge分支导入topic分支的话,先使用rebase,再使用merge。
例如,在开发功能的develop分支操作途中,需要修改bug。
…..
这时,merge分支还是处于开发功能之前的状态。在这里新建修改错误用的主题分支,就可以从开发功能的作业独立出来,以便开始新的工作。
完成bug修正的工作后,把分支导入到原本的merge分支后就可以公开了
回到原本的分支继续进行开发功能的操作。
但是,如果要继续进行操作,你会发现需要之前修正bug时提交X的内容。有2种导入提交X的内容的方法:一种是直接merge,另一种是和rebase导入提交X的合并分支。
这里我们使用rebase合并分支的方法。
在导入提交X的内容的状态下继续进行开发功能。
master主分支
release分支
develop分支
feature分支
hotfix分支
master
master分支只负责管理发布的状态。在提交时使用标签记录发布版本号。
develop
develop分支是针对发布的日常开发分支。刚才我们已经讲解过有合并分支的功用。
一般的开发是在develop分支上进行的,到了可以发布的状态时再创建release分支,为release做最后的bug修正。
到了可以release的状态时,把release分支合并到master分支,并且在合并提交里添加release版本号的标签。
要导入在release分支所作的修改,也要合并回develop分支。
例如,在develop分支上的开发还不完整时,需要紧急修改。这个时候在develop分支创建可以发布的版本要花许多的时间,所以最好选择从master分支直接创建分支进行修改,然后合并分支。
修改时创建的hotfix分支要合并回develop分支。
参考:
git
一个成功的Git分支模型
Git Community Book 中文版
2.merge
2.1 简单分支merge
2.2 多人merge分支
3.rebase
3.总结
4.实际应用结合
5.五类主要分支
5.1 主分支
5.2 feature分支
5.3 release分支
5.4 hotfix分支
6.项目实际效果
1.分支的合并概述
完成作业后的topic分支,最后要合并回merge分支。合并分支有2种方法:使用merge或rebase。使用这2种方法,合并后分支的历史记录会有很大的差别。2.merge
使用merge可以合并多个历史记录的流程。最简单的操作,如下图所示,仅有bugfix一个分支是从master分支分叉出来的。
2.1 简单分支merge
合并 bugfix分支到master分支时,如果master分支的状态没有被更改过,那么这个合并是非常简单的。 bugfix分支的历史记录包含master分支所有的历史记录,所以通过把master分支的位置移动到bugfix的最新分支上,Git 就会合并。这样的合并被称为fast-forward(快进)合并。
2.2 多人merge分支
master分支的历史记录有可能在bugfix分支分叉出去后被人有新的更新。这种情况下,要把master分支的修改内容和bugfix分支的修改内容汇合起来。因此,合并两个修改会生成一个提交。这时,master分支的HEAD会移动到该提交上。
执行合并时,如果设定了non fast-forward选项,即使在能够fast-forward合并的情况下也会生成新的提交并合并。
执行non fast-forward后,分支会维持原状。那么要查明在这个分支里的操作就很容易了。
3.rebase
跟merge的例子一样,如下图所示,bugfix分支是从master分支分叉出来的。如果使用rebase方法进行分支合并,会出现下图所显示的历史记录。现在我们来简单地讲解一下合并的流程吧。
首先,rebase bugfix分支到master分支, bugfix分支的历史记录会添加在master分支的后面。如图所示,历史记录成一条线,相当整洁。
这时移动提交X和Y有可能会发生冲突,所以需要修改各自的提交时发生冲突的部分。
rebase之后,master的HEAD位置不变。因此,要合并master分支和bugfix分支,即是将master的HEAD移动到bugfix的HEAD这里。
3.总结
Merge和rebase都是合并历史记录,但是各自的特征不同。merge
保持修改内容的历史记录,但是历史记录会很复杂。
rebase
历史记录简单,是在原有提交的基础上将差异内容反映进去。
因此,可能导致原本的提交内容无法正常运行。
您可以根据开发团队的需要分别使用merge和rebase。
例如,想简化历史记录,
在topic分支中更新merge分支的最新代码,请使用rebase。
向merge分支导入topic分支的话,先使用rebase,再使用merge。
4.实际应用结合
我们用简单的实例来讲解develop分支和merge分支的操作方法。例如,在开发功能的develop分支操作途中,需要修改bug。
…..
这时,merge分支还是处于开发功能之前的状态。在这里新建修改错误用的主题分支,就可以从开发功能的作业独立出来,以便开始新的工作。
完成bug修正的工作后,把分支导入到原本的merge分支后就可以公开了
回到原本的分支继续进行开发功能的操作。
但是,如果要继续进行操作,你会发现需要之前修正bug时提交X的内容。有2种导入提交X的内容的方法:一种是直接merge,另一种是和rebase导入提交X的合并分支。
这里我们使用rebase合并分支的方法。
在导入提交X的内容的状态下继续进行开发功能。
5.五类主要分支
经典的分支模型图master主分支
release分支
develop分支
feature分支
hotfix分支
5.1 主分支
主分支有两种:master分支和develop分支master
master分支只负责管理发布的状态。在提交时使用标签记录发布版本号。
develop
develop分支是针对发布的日常开发分支。刚才我们已经讲解过有合并分支的功用。
5.2 feature分支
这个分支是针对新功能的开发,在bug修正的时候从develop分支分叉出来的。基本上不需要共享特性分支的操作,所以不需要远端控制。完成开发后,把分支合并回develop分支后发布。5.3 release分支
release分支是为release做准备的。通常会在分支名称的最前面加上release-。release前需要在这个分支进行最后的调整,而且为了下一版release开发用develop分支的上游分支。一般的开发是在develop分支上进行的,到了可以发布的状态时再创建release分支,为release做最后的bug修正。
到了可以release的状态时,把release分支合并到master分支,并且在合并提交里添加release版本号的标签。
要导入在release分支所作的修改,也要合并回develop分支。
5.4 hotfix分支
hotfix分支是在发布的产品需要紧急修正时,从master分支创建的分支。通常会在分支名称的最前面加上 hotfix-。例如,在develop分支上的开发还不完整时,需要紧急修改。这个时候在develop分支创建可以发布的版本要花许多的时间,所以最好选择从master分支直接创建分支进行修改,然后合并分支。
修改时创建的hotfix分支要合并回develop分支。
6.项目实际效果
参考:
git
一个成功的Git分支模型
Git Community Book 中文版
相关文章推荐
- git rebase & merge 将其他分支的修改合并到当前分支
- 分布式版本控制系统Git------分支管理与合并(merge与rebase)
- Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突
- git 合并分支出现 Please enter a commit message to explain why this merge is necessary.
- Git客户端图文详解如何安装配置GitHub操作流程攻略
- Git 分支操作详解
- Git代码合并Merge还是Rebase
- Git怎样撤销一次分支的合并Merge
- git本地已经有了mater分支如何获取develop分支的源代码(不做合并操作,只拉代码)
- Git怎样撤销一次分支的合并Merge
- Git常用命令(创建分支-关联分支-提交-合并等操作)
- 关于Git中分支merge和rebase的适用场景及区别
- git---基本操作、新建分支,合并分支branch到主干master ,git pull ,git push
- IDEA中对Git的常规操作(合并,提交,新建分支,更新)
- Git怎样撤销一次分支的合并Merge
- Git merge 合并分区详解
- idea中git合并切换分支等操作
- Git 分支 - 变基(rebase和merge的区别)
- windows下git的安装、配置与操作(七)——git创建与合并分支(转载自廖雪峰)
- git 使用详解(8)-- 分支的新建与合并