git:rebase(变基)的使用和理解

今天了解下git的rebase功能,这里假设你们已经对git有所学习了,所以不会讲解git的其余基础用法。git是一款工具,因此学习的首要目的是明白其功能有什么做用,这里咱们一步一步来分析rebase(变基)的做用。git

假设咱们须要建立一个分支用来开发产品的新功能,bash

 git checkout -b feature工具

能够看到咱们当前只有两个分支,而且已经切换到了feature分支上。学习

接下来咱们在feature分支下修改文件test.txt中的内容,在里面添加content_feature,保存而且提交。spa

git add test.txt3d

git commit -m 'feature分支'code

查看下提交的状况:cdn

git log --graph --pretty=oneline --abbrev-commit blog


这时,feature分支的功能开发完成了,可有时咱们可能也会在master分支下,对同一个文件作出修改。如这时咱们在master分支下对test.txt文件添加的内容为content_master教程

一样是保存而且提交。

git add test.txt

git commit -m 'master分支'


接下来是重点,当咱们feature新功能开发完成时,就要合并到主分支中了。

git merge featture


能够看到合并内容有冲突,咱们须要手动修改。那就改为content_master_feature吧。


接下来从新提交完成合并:

git add test.txt

git commit -m 'merge_master_feature'


能够看到合并成功。

。。。。总算该讲到rebase(变基)了。

变基其实也是一种合并分支的方法。如咱们能够切换到feature分支下后,再用git reabse master命令进行分支合并。为何要切换到feature分支下呢?而这句命令又是什么意思?

首先,咱们得知道,使用merge合并时,实际上是一种三方合并,就是修改后的master分支和feature分支,是以修改前的master分支为基础进行的合并。盗图:


能够认为c3,c4分别表明修改后的master分支,feature分支,而c2就是修改前的master分支,作为c3,c4基础的。

这时再看rebase变基这个名称,不就变换基础吗?那把谁变成基础分支呢?再盗图:


能够看到,咱们把c3做为基础了,也就时修改后master分支,而feature分支的变化直接做用在master分支上,造成了新的master分支c4'。实现这些的命令:

git checkout feature

git rebase master


和以前同样,先要解决冲突,而且如何解决的方法都提供给咱们了。

git add test.txt

git rebase --continue

这时,feature(c4')分支就以修改后的master(c3)分支为基础进行的改变。
接下来就能够切换回master分支,并快速合并两个分支。

$ git checkout master
$ git merge feature复制代码


说到这,,有点想骂人了是不,不是有merge了吗?要rebase这么麻烦干吗啊??请下图:

没有变基的合并:


变基后的合并:


嗯嗯,没错了,变基的做用就是修整历史,将分支历史并入主线

。。。是否是,这功能看起没没啥卵用,其实这功能是须要在某些场景下才会有明显做用,好比当咱们向他人维护的开源项目提交修改时,确定要先在本身的分支中进行开发,而后再提交,但若是咱们变基后再提交,维护人员就不用进行整合工做了,直接快速合并便可。

感受这些做用对我来讲仍是好遥远的啊,,,因此,就先学习到这儿吧,这些比较高级的功能你没实际的使用场景,学了也会很快忘记,了解了解便可,等到真的要用到时,也能加快咱们的学习速度。

参考:

git的官网教程

某个大神的深刻讲解

相关文章
相关标签/搜索