git rebase 和 git merge 的区别实验

git rebase 和 git merge 一样都是用于从一个分支获取并且合并到当前分支,但是他们采取不同的工作方式,以下面的一个工作场景说明其区别。

场景: 

如图所示:你在一个feature分支进行新特性的开发,与此同时,master 分支的也有新的提交。

首先master上有三个原始文件:

然后git checkout -b feature,在feature上进行新特性的开发如下:3feature.text和4feature.text

 然后有回到master上新增加了两个文件,3master.text和4master.text

结构如下所示:

 

为了将master 上新的提交合并到你的feature分支上,你有两种选择:merging or rebasing

merge

执行以下命令:

git checkout feature
git merge master

那么此时在feature上git 自动会产生一个新的commit(merge commit)

如图所示:

结构就像这样子:

 

 

marge 特点:自动创建一个新的commit
如果合并的时候遇到冲突,仅需要修改后重新commit
优点:记录了真实的commit情况,包括每个分支的详情
缺点:因为每次merge会自动产生一个merge commit,所以在使用一些git 的GUI tools,特别是commit比较频繁时,看到分支很杂乱。

rebase

本质是找公共祖先

首先还是和上面一样,不同是我们这次采用rebase的命令

git checkout feature
git rebase master

会合并之前的commit历史:

如下图所示:

结构图如下:

 

rebase 特点:会合并之前的commit历史
优点:得到更简洁的项目历史,去掉了merge commit
缺点:如果合并出现代码问题不容易定位,因为re-write了history

 

综上所述:

  1. 可以看出merge结果能够体现出时间线,但是rebase会打乱时间线。
  2. 而rebase看起来简洁,但是merge看起来不太简洁。

在项目中经常使用git pull来拉取代码,git pull相当于是git fetch + git merge,

如果此时运行git pull -r,也就是git pull --rebase,相当于git fetch + git rebase

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值