一、git rebase解决什么问题
git merge 命令存在两种情景
1、 fast-forward (当前分支的base与master最新commit一致)
2、 no-fast-forward (当前分支的base与master最新commit不一致)
git rebase就是将no-fast-forward变成fast-forward
二、时间轴比对
使用rebase
使用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在提交之后追加到上游分支,成线形记录。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。