作用都是将一个分支整合到另一个分支。
差异: git merge是进行三方合并;git rebase是先更新“base”,再将当前分支的差异补丁重新打上去。
git merge 合并
工作原理: 将两个分支最新的快照以及二者的共同祖先进行三方合并。
git rebase 衍合
工作原理: 回到两个分支的共同祖先,提取所在分支每次提交时产生的差异,将这些差异分别保存到临时文件里,然后从当前分支转换到你需要衍合的分支,依序施用每一个差异补丁文件。
【可以理解为,先保存当前分支的差异补丁,然后更新base为新的base,再将保存的差异补丁施用到新的base上,base理解为分支的共同部分】
优点: 可以产生更为整洁的提交历史
缺点: 在衍合的时候,实际上抛弃了一些现存的 commit 而创造了一些类似但不同的新 commit。会影响那些基于现存commit的分支。
永远不要衍合那些已经推送到公共仓库的更新。
如果把衍合当成一种在推送之前清理提交历史的手段,而且仅仅衍合那些永远不会公开的
commit,那就不会有任何问题。如果衍合那些已经公开的 commit,而与此同时其他人已经
用这些 commit 进行了后续的开发工作,那你有得麻烦了。