假设我们有如下git 提交记录
WX20191226-111014@2x.png
- 初始节点
- master 基于初始节点进行了2次更改
- feature 基于初始节点进行了2次更改
WX20191226-110941@2x.png
这样做法是没有问题的, 但是对于code review是一个很不好的体验, 特别是实际项目中的代码合并情况往往特别复杂, 经常出现feature需要master中的新功能, 导致反复合并的情况,git 提交记录更没办法看了. 这个时候, 如果正确的使用rebase , 可以大幅减少git log 的复杂度.
我们先切回到feature分支, 然后执行rebase
image.png
得到下图的结果
image.png
git 提交的线被撸直了, 好像feature是基于最新的master进行修改的, 并且feature里也包含的master的所有代码.
结合交互式的折叠 就可以大幅减少git 中的提交记录的次数, merge的数量, code review的时候, 每一次更改都一目了然.
注意: 如果需要rebase的分支已经推送到了remote , 那么进行rebase的操作的时候, 请将本分支再分支一个出来, 因为rebase是对分支已有的提交进行修改, 如果其他人拉取了你的旧的提交, 你再推送新的更改上去, 会让人很困惑, 所以对于已经推送到远端的分支, rebase一定要创建一个新的分支, 不要推送到远端的时候,进行rebase(变基)