git merge 和 git rebase 均具有合并分支的效果,但合并分支的机理不同
Branch
Git merge
git merge 是将本质上生成一个新的提交,如果合并的时候遇到冲突,仅需要修改后重新commit,保留了分支详情
- 优点:记录了真实的commit情况,包括每个分支的详情
- 缺点:因为每次merge会自动产生一个merge commit,所以在使用一些git 的GUI tools,特别是commit比较频繁时,看到分支很杂乱
Merge
Git rebase
git rebase 的本质是变基,合并之前的commit历史,将分支的所有commit按提交顺序转移到干路末端
- 优点:得到更简洁的项目历史,去掉了merge commit
- 缺点:如果合并出现代码问题不容易定位,因为rewrite了history
合并时如果出现冲突需要按照如下步骤解决:
- 修改冲突部分
- git add
- git rebase --continue
(如果第三步无效可以执行 git rebase --skip)
Rebase.png
参考
https://www.jianshu.com/p/f23f72251abc
总结
- git rebase尽可能不要在公共分支上使用,由于他人在master上的共同开发,可能会引起许多冲突
- git rebase的使用需注意其对提交历史的破坏性,如果有人需要观测开发的历史过程,尽量避免使用rebase
- 想得到干净直观的线性历史树,用git rebase
- 想保留完整的历史记录,避免重写commit的风险,用git merge