什么时候该用 git rebase 而不是 git merge

rebase 用于:同步主干到个人功能分支(线性历史)、合并前整理提交(squash 杂乱 WIP)、搬运提交串。merge 用于:共享分支合并、需要保留真实合并记录的场景。铁律:已推送且有人使用的历史不 rebase。

最佳实践
Git 分支协作与合并示意

简单口诀:自己的提交整理用 rebase,别人的历史汇合用 merge。 rebase 得到线性干净的历史但改写提交;merge 保留真实拓扑但多出合并节点。

该用 rebase 的场景

  1. 功能分支同步主干:git rebase main——你的提交像是一直基于最新代码写的,历史一条线;
  2. 合并前整理:git rebase -i 把 "fix typo"、"wip" 之类的杂乱提交 squash 干净再合 PR;
  3. 搬运提交串:git rebase --onto 把分支嫁接到另一个基点。

该用 merge 的场景

  1. 共享分支的汇合:main/release 上的合并——历史真实可审计;
  2. 需要"这个特性是整体进来的"语义:合并提交本身就是边界标记(--no-ff);
  3. 长期并行分支:反复 rebase 长分支会不断重写,冲突反复出现,merge 只解一次。

黄金法则

已推送并被他人使用(或可能使用)的提交,不要 rebase。

rebase 改写哈希,别人基于旧历史的工作会全部错位。个人分支、未推送的提交随便 rebase;公共历史只进不退(merge/revert)。

常见问题(FAQ)

Q:pull 时用 rebase 还是 merge?

个人习惯 + 团队约定。pull.rebase=true 让你本地的零星提交不产生无意义合并节点,多数团队推荐。

Q:rebase 的"线性历史"有什么实际好处?

git bisect 二分定位 bug 更顺、git log 更易读、 revert 单个特性更干净。历史是给未来的自己看的文档。

Q:两者能混用吗?

日常就是混用的:功能分支上 rebase 整理,合回 main 用 merge(或 squash)。关键是别对共享历史 rebase。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台