一、com
merge和rebase都可以用来进行代码合并,也就是分支合并。
merge的设计目标就是用来进行分支合并,并且保留所有分支和所有分支的历史纪录。但rebase还有别的使用场景,比如更新当前分支的起点,跟master保持一致。
rebase的设计目标用来修改提交记录,它可以删除、合并、修改commit,其中合并commit其实就变相实现了分支合并。比如从master创建了一个feature分支,正开发着,别人又向master提交了一次版本,这就像所有人都想用最新版的手机一样,那我也想在最新版的代码上开发,此时就可以用rebase,即更新了代码,又把我自己的提交放在了最前面。如果此时用merge,那最前面的提交还不一定是我的。
二、原理
merge
merging分支包含current分支的所有commits:fast-forward模式,直接合并,此时等价于rebase,不会有新的commit。
current分支包含merging分支不存在的commits:no-fast-forward模式,找到2个分支的共同起点,用合并后的变更生成一个新的commit提交到current分支。
rebase
复制当前分支的所有新提交,然后将这些变换生成commit提交到基干分支的最前面,复制的这些分支的commitID都会变化。