一、git rebase解决什么问题
git merge 命令存在两种情景
1、 fast-forward (当前分支的base与master最新commit一致)
文章图片
2、 no-fast-forward (当前分支的base与master最新commit不一致)
文章图片
git rebase就是将no-fast-forward变成fast-forward
二、时间轴比对
【git rebase vs git merge】使用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在提交之后追加到上游分支,成线形记录。
优质文章推荐:
https://zhuanlan.zhihu.com/p/...
推荐阅读
- Java进阶之路|一条 Git 命令减少了一般存储空间,我的服务器在偷着笑
- git|Git stash 指令总结(暂存和恢复)
- Git|Git命令行提交
- git.exe在哪里()
- Git教程目录
- Linux|将项目部署到GitHub上(详解)
- 从零开始快速搭建本地 Kubernetes 测试环节
- 所有餐饮人都应该知道的数字化正确姿势(2022 企业效能挑战赛一等奖《连锁餐饮收银管理》)