git rebase 变基
假设我们有如下两个分支,feature和master都对文件做了修改,有前进。
变基其实也是一种合并分支的方法。如我们可以切换到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 checkout feature
git rebase master
git add test.txt
git rebase --continue
git checkout master
git merge feature
另外一种方法:
git checkout master
git pull --rebase origin master
参考:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA