社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

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

newbeehh • 6 年前 • 227 次点击  
阅读 36

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

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

假设我们需要创建一个分支用来开发产品的新功能,

 git checkout -b feature

可以看到我们当前只有两个分支,并且已经切换到了feature分支上。

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

git add test.txt

git commit -m 'feature分支'

查看下提交的情况:

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


这时,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的官网教程

某个大神的深入讲解



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/yjtGM0qjY9
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/21006
 
227 次点击