merge 与 rebase 的区别
1. merge(合并)
- 作用:将两个分支的历史合并,生成一个新的合并提交(merge commit)。
- 优点:
- 保留了分支的历史和分叉结构。
- 操作简单,适合多人协作。
- 缺点:
- 历史记录会出现多余的合并节点,日志可能变复杂。
示例:
A---B---C---D (master)
\
E---F (feature)
执行 git merge feature 后:
A---B---C---D---G (master)
\ /
E-------F (feature)
G 为 merge commit。
2. rebase(变基)
- 作用:将当前分支的提交“移动”到目标分支的最新提交之后,重写提交历史。
- 优点:
- 提交历史更线性、整洁。
- 更容易理解每次变更。
- 缺点:
- 会重写历史(提交哈希变化),不适合已推送到远程的公共分支。
- 操作不当可能导致冲突难以解决。
示例:
A---B---C---D (master)
\
E---F (feature)
执行 git rebase master 后:
A---B---C---D---E'---F' (feature)
E’、F’ 是新的提交,基于 D 之上。
3. 选择建议
- merge:适合团队协作,保留分支历史。
- rebase:适合个人开发或整理提交,保持历史整洁。
4. 常用命令
-
合并分支:
git checkout master git merge feature -
变基分支:
git checkout feature git rebase master
5. 总结
| 操作 | 是否重写历史 | 是否生成合并提交 | 历史结构 | 推荐场景 |
|---|---|---|---|---|
| merge | 否 | 是 | 分叉+合并 | 团队协作 |
| rebase | 是 | 否 | 线性 | 个人整理/小团队 |
注意: 不要对已推送到远程的公共分支做 rebase!