Merge & Rebase

Merge

合并两个分支

  1. main 分支上执行 git merge feat 命令,将 feat 合入 main
  2. Git 会将 A, B, C 做一个三方合并,然后提交合并的结果
🐳

提交历史是非线性的,并且会引入一次新的提交。

Rebase

合并多个提交

  1. 使用 git rebase -i HEAD~3 命令,合并最近三个提交
🐳

常用来清理提交历史。

线性三方合并

  1. 首先在 feat 分支上执行 git rebase main 命令,将 feat 分支变基到 main 分支
  1. 然后在 main 分支上执行 git merge feat 命令,Git 会将 A, B, C 做一个快速合并
🐳

提交历史是线性的,但需要解决多次冲突。

Appendix

两方合并

我们想要将 feat 合入 main,但是仅仅对比 B, C ,我们无法知道是谁修改了文件,所以只能手动合并

三方合并

三方合并引入了 B, C 的共同父节点 A,可以找出修改的文件,因此可以自动合并

DiffResult
A = B = C内容无修改
A = BCC 进行了修改,保留 C
A = CBB 进行了修改,保留 B
B = CAB, C 进行了相同的修改,保留 BC
ABC发生冲突,手动保留

快速合并

做三方合并时,如果 main 上没有新的提交,就不会产生冲突,Git 会直接将 main 指针前移到 C

🐳

快速合并不会产生新的提交,并且记录是线性的。