全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-11 7 分钟 ✍️ juanwangdev

rebase vs merge 选择

rebase 和 merge 是 Git 合并分支的两种策略,各有适用场景。

历史结构对比

Bash
merge 产生的历史:
A → B → C → M(合并提交)
            ↗
       D → E

rebase 产生的历史:
A → B → C → D' → E'
(线性历史,无合并提交)

特点对比

特性mergerebase
历史分叉,真实记录线性,干净整洁
合并提交
提交顺序按时间按变基顺序
回溯能力容易追溯分支分支信息丢失
安全性安全,不改历史改写历史,需谨慎

使用场景选择

选择 merge

场景原因
合入公共分支保持历史真实
已推送的分支rebase 会改写历史
团队协作分支保留协作信息
重要功能分支追溯功能来源

选择 rebase

场景原因
本地开发分支清理本地历史
功能分支更新同步上游变更
提交整理合并、编辑提交
保持历史整洁线性历史易读

最佳实践

功能分支开发流程

Bash
# 定期同步上游(用 rebase)
git checkout feature
git fetch origin
git rebase origin/main

# 完成后合入(用 merge --no-ff)
git checkout main
git merge --no-ff feature

本地提交整理

Bash
# 整理本地提交历史
git rebase -i HEAD~3

# 推送前确保历史整洁
git push origin feature

避免的操作

text
# 错误:对已推送分支 rebase
git push origin feature
git rebase main
git push origin feature  # 会冲突!

# 正确:已推送分支用 merge
git merge origin/main

团队协作建议

分支类型合入方式
功能分支 → mainmerge --no-ff
本地分支同步上游rebase
已推送分支更新merge
提交整理rebase -i

决策原则

  1. 已推送用 merge:不改写远程历史
  2. 本地用 rebase:保持历史整洁
  3. 合入公共分支用 merge:保留历史信息
  4. 整理提交用 rebase -i:合并、修改提交

选择原则:本地整理用 rebase,团队协作用 merge。

要点总结

  1. merge 保留真实历史,rebase 使历史线性
  2. 已推送分支只能用 merge
  3. 本地分支可以用 rebase 整理
  4. 合入公共分支推荐 merge --no-ff
  5. 功能分支同步上游可用 rebase

📝 发现内容有误?点击此处直接编辑

← 上一篇 git rebase 变基操作
下一篇 → git fetch 获取远程更新
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库