git merge和rebase合并分支的区别

一、描述

在使用 git 进行版本管理的项目中,在feature分支开发完成,要将其合并到master分支时,我们有两种方式,一种是 git merge 另一种是 git rebase ,通常,我们对git merge 比较熟悉,而对git rebase 使用较少。其实,git rebase 也是极其强大的一种合并方法,下面我们就讨论下merge 和 rebase 的差别已经使用场景。

如下图,你在feature分支上进行开发,于此同时你在master也有新的提交。

 为了将master分支合并feature到上,有两种选择,merge 和 rebase。

二、git merge

最简单的方法是使用以下方法将master合并到feature:

git checkout feature
git merge master

或者执行:

git merge feature master

那么在feature上会自动产生一个提交记录(merge commit)

merge 合并之后的结果:

 merge合并的优点:

  • 自动创建一个新的commit,记录了真实的commit情况,方便查看记录
  • 如果合并遇到冲突,仅需要修改后重新commit即可

merge的缺点:就是每次合并都会产生一个新的commit, 所以在使用一些git的 GUI工具,特别是commit比较频繁时,就会看到分支线很杂乱。这时如果有问题需要查找就会很困难。

三、git rebase

与git merge功能一致,rebase的目的也是将一个分支的更改合并到另一个分支中去。

rebase 在很多中文翻译中,会翻译为 “变基” 。

执行以下命令:

git checkout feature
git rebase master

 

如上图所示,rebase的特点:

  • 改变当前分支从master上拉出分支
  • 没有多余的合并历史记录,并且合并后的commit顺序不一定按照commit的提交时间排序
  • 可能会多次解决同一个地方的冲突
  • 提交记录更干净,master上每个commit点都是相对独立完整的功能点

假如我们在rebase的过程中遇到了冲突,我们在解决冲突之后,需要执行:

1. git add

2.  git rebase --continue 来继续变基的操作。

3. 如果执行第二步无效,那么可以执行 git rebase --skip

注意:不要执行完 git add 之后执行 git commit

可以看出,feature 分支上的所有提交信息都会被合并到 master 分支上了,这些信息对我们来说不是必要的,我们在 masetr 分支上往往只需要知道合并进来了什么新的功能即可,这些多余的信息可以通过 git rebase 的交互模式进行整合

四、git rebase 交互模式

打开变基的交互模式只需要传入一个参数 -i 即可,同时指定对哪些提交进行处理,例如:

git rebase -i HEAD~4

以上命令指定了对当前分支的最近四次提交进行操作,下面可以使用上面的命令对 feature 分支的提交进行合并:

 

 处理完之后可以使用下面的命令进行提交

五、总结

当需要保留详细的合并信息的时候建议使用git merge,特别是需要将分支合并进入master分支时;当发现自己修改某个功能时,频繁进行了git commit提交时,发现其实过多的提交信息没有必要时,可以尝试git rebase。

 

参考:

https://www.atlassian.com/git/tutorials/merging-vs-rebasing

https://www.liaoxuefeng.com/wiki/896043488029600/1216289527823648

 

posted on 2021-02-23 18:12  sjpqy  阅读(597)  评论(0编辑  收藏  举报

导航