场景:
基于main分支创建了一个特性分支feature,在feature上新增了C2、C3、C4提交

同时main分支上又合入了其他提交

这时如果要将main分支上新引入的这些变更也整合进feature分支,此时使用merge还是rebase
相同点:merge还是rebase都具备整合分支的能力
不同点:实现方式
在feature上执行git merge main时,git会以我方(feature)、对方(main)以及双方最近公共祖先对应的快照执行三路合并生成新快照,并基于此快照创建一个连接feature分支和main的合并节点,最后调整feature的指向

结论:merge总是在向前推进提交历史,并不会影响提交的原始状态
整合方式是对提交历史的重写,在feature上执行git rebase main时,git会从双方最近的公共祖先开始,将feature上每个提交对应的变更暂存起来,然后以main分支所指向的提交为新起点,将暂存的变更按顺序一一还原成新提交。rebase完成后,feature分支的起始点变成了main分支最后的快照

通常情况下:merge还是rebase,特性分支feature最终所指向的快照完全相同。也就是说merge合成的快照和rebase重建出的快照所对应的代码内容是完全相同的,但却构建出了不同的提交历史