在日常开发中,我们经常需要将一个分支的变更整合到另一个分支。Git 提供了两种主流方式:Merge(合并) 和 Rebase(变基)。它们都能达到'同步代码'的目的,但工作原理、历史记录和适用场景截然不同。本文将通过原理、示例和对比,帮助你理解何时该用哪种方式。
一、Merge:保留历史的'合并'
什么是 Merge?
git merge 会创建一个新的 合并提交(merge commit),将两个分支的历史连接起来,保留完整的变更路径。
示例
假设你的 master 分支和功能分支 feature 的历史如下:
master: A — B — C \ feature: D — E
执行:
git checkout feature
git merge master
结果:
master: A — B — C \ \
feature: D — E — F (merge commit)
- 提交
F是一个合并提交,有两个父节点:E和C。 - 所有历史原封不动保留。
优点
- ✅ 安全:不修改已有提交,适合团队协作。
- ✅ 可追溯:明确记录'何时合并了哪个分支'。
- ✅ 支持复杂协作:多人共用分支时不易出错。
缺点
- ❌ 历史图会有'分叉',看起来不够线性。
- ❌ 会产生额外的 merge commit(部分人认为'冗余')。
二、Rebase:重写历史的'变基'
什么是 Rebase?
git rebase 会将当前分支的提交'重新应用'到目标分支的最新提交之后,重写提交历史,让历史变成一条直线。
示例
同样从以下状态开始:
master: A — B — C \ feature:

