不止一叶代码屋 个人技术博客 · 代码与生活的记录

工程实践

rebase 还是 merge:一次团队协作后的反思

争论的两方

一派说「rebase 才有干净的历史」,一派说「merge 才保留真实过程」。两边都对,但都没说到点子上 —— 关键是你想让谁看懂这段历史。

我们最后定的规矩

  • 个人分支同步主干:用 rebase,保持自己的提交线性
  • 合并回主干:用 merge,且必须开 PR
  • 主干:永远可发布,禁止直接 push

理由是:开发过程中的反复修改对 reviewer 没价值,但「这个功能什么时候进来的」对排查问题极有价值。

rebase 的雷

已经 push 到公共分支的提交,我是坚决不 rebase 的。原因很实际:

团队里只要有一个人的本地分支还被 force-push 影响过,接下来两小时就会有人在修冲突。

代价远大于收益。

一个实用命令

同步主干时我常用:

git fetch origin
git rebase origin/main

如果中途冲突,解决完 git rebase --continue。想放弃就 git rebase --abort,回到干净状态。

提交粒度

比策略更重要的一件事:一个提交只做一件事。

「修了 bug 顺便重构」这种提交,无论用 rebase 还是 merge 都是灾难。分裂成两个提交,git log 才有意义。

小结

工具没有对错,规矩才有。团队里定好一套、严格执行,比争哪种更优雅重要得多。

订阅 RSS

← 返回首页