工具 Git协作

rebase 还是 merge,我把团队的分歧整理成了三条规则

我们组两个人,为 Git 的用法吵了一下午。我习惯在 feature 分支上定期 rebase 主干,保持提交线是一条直线;同事坚持 merge,理由是"历史就是历史,不该改写"。谁也说服不了谁,因为两个人说的都对。

后来把争论焦点拆开看,其实只有一个问题:已推送的提交能不能重写。rebase 的本质是把你的提交摘下来,重新安到新的基底上——提交内容没变,但身份(hash)全变了。如果这些提交已经推到远端、别人可能已经基于它们开发,重写就是灾难;如果只有你自己在用,重写反而让历史干净。

所以最后定下来三条规则,挂在了 README 里:

一句话版本:rebase 用在自己的分支上,merge 用在别人看得见的地方。

执行几个月下来,偶尔还是有新人问"为什么我 pull 下来又多了一个 merge commit"。十次有九次是 git pull 没带 --rebase。把全局配置 pull.rebase true 打开之后,这类问题就绝迹了。

场景用哪个原因
个人分支同步主干rebase提交线干净,冲突早发现
合入共享分支merge --no-ff批次清晰,不重写公共历史
紧急回滚定位都行靠 revert 而不是 reset

规则不是真理,是让团队少吵架的约定。哪天换成十人团队,这三条大概率要重写——那也正常。