1. 将传入更改合并到当前分支(Merge)
-
本质上是执行:
git pull --merge
-
过程:
- Git 会把远程分支的最新提交合并到你的当前分支。
- 如果本地有新的提交,合并会产生一个新的 合并提交(merge commit),历史会呈现分叉和合并的图形。
-
特点:
- 保留完整历史,清晰展现“谁在什么时候分支、什么时候合并”。
- 历史可能比较“乱”,尤其是多人协作时,日志里会有很多 merge commit。
2. 在传入更改上变基当前分支(Rebase)
-
本质上是执行:
git pull --rebase
-
过程:
- Git 会先把你本地分支的提交“拿下来”,让当前分支回到远程分支的最新状态,再把你本地的提交“重新应用”到这之上。
- 结果就是历史看起来像是你在远程分支的最新提交之后再提交了你的更改。
-
特点:
- 历史干净,线性,没有额外的 merge commit。
- 但是提交的哈希值会变化(因为是“重新应用”),如果这些提交已经推送过远程,rebase 后需要
--force
推送,容易出问题。
举个例子
远程分支历史:
A---B---C (origin/main)
本地你有新提交:
A---B---D (main)
如果选择 合并(merge):
A---B---C\ \D---M (main)
M
是新产生的合并提交。
如果选择 变基(rebase):
A---B---C---D' (main)
看起来就像 D
是在 C
之后产生的。