git rebase vs git merge

一、git rebase解决什么问题 git merge 命令存在两种情景
1、 fast-forward (当前分支的base与master最新commit一致)
git rebase vs git merge
文章图片

2、 no-fast-forward (当前分支的base与master最新commit不一致)
git rebase vs git merge
文章图片

git rebase就是将no-fast-forward变成fast-forward
二、时间轴比对 【git rebase vs git merge】使用rebase
git rebase vs git merge
文章图片

使用merge
git rebase vs git merge
文章图片

三、场景 下游(dev)分支更新上游(master)分支内容,使用rebase
上游(master)分支合并下游(dev)分支内容,使用merge
当前分支更新操作:git pull origin dev --rebase
当前分支rebase之后:git push origin dev --force
git rebase 一般只用于非master分支,比如在dev分支中执行git rebase master,master分支始终作为基准分分支
git merge 可以在任何分支merge其他分支,比如在master中merge dev,也可以在dev分支中merge master
另一种场景:
fork项目,提交pr更多的时候采用git rebase
四、rebase优势 rebase提供一套清晰的代码历史。
在我们当前的oceanus项目开发中,分支只存在于迭代的开发中,开发完成之后特性分支保留一段时间之后就会被删除,所以采用merge合并代码的网格记录对于我们来说,其实没什么价值。
另外最近一段时间存量迭代较多,导致一个特性分支发布之后,每个存量迭代对应的分支代码都会进行一次merge,会无形之中添加很多 merge branch master into ... 记录。
merge合并代码是按commit提交的时间来处理,所以Merge branch 'v4.6-subnet' into v4.6.0-savepoint类似的提交与实际的commit可能相隔很远,而且commit与其他分支的commit交织在一起,导致某一个完成功能开发的代码提交记录被分割。
rebase因为存在commit refresh,所以commit在提交之后追加到上游分支,成线形记录。
优质文章推荐:
https://zhuanlan.zhihu.com/p/...

    推荐阅读