当前位置: 代码迷 >> 综合 >> git rebase 和 git merge 的区别实验
  详细解决方案

git rebase 和 git merge 的区别实验

热度:26   发布时间:2023-12-23 14:13:19.0

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

 

  相关解决方案