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