接受混乱的 git 历史
摘要
一篇博客文章,讨论两种 git 工作流理念——频繁提交与谨慎变基——并解释为何在大型团队中,鉴于团队的韧性,混乱的历史是可以接受的,文中还提到了 GitHub 的新堆叠 PR 功能。
<p><a href="https://lobste.rs/s/aj7msu/accepting_messy_git_history">评论</a></p>
查看缓存全文
缓存时间: 2026/07/31 18:50
# 接受混乱的 git 历史
来源:https://beza1e1.tuxen.de/git_two_users.html
由于 GitHub 刚刚发布了堆叠式拉取请求(https://github.blog/changelog/2026-07-30-stacked-pull-requests-are-now-in-public-preview/),围绕它的讨论揭示了两种 git 用户:
1. 那些**频繁提交**且不太多想的人。
2. 那些**仔细变基**以打造干净历史的人。
频繁提交的人认为变基的人是在把时间浪费在无意义的活动上。细粒度的历史能反映开发实际发生的过程。
变基的人认为频繁提交的人又懒又粗心。只有拥有干净的历史,才有可能理解变更背后的意图。
## 在堆叠拉取请求时
看看 HN 讨论(https://news.ycombinator.com/item?id=49112232),你可以看到频繁提交的人在庆祝。Steve Klabnik(https://news.ycombinator.com/item?id=49114492):
> 这是多年来 GitHub 上最大的变化之一。我很高兴看到这样的东西被部署到世界上最大的代码托管平台之一,希望它能让许多开发者接触到他们以前甚至不知道的工作流程。
与此同时,变基的人感到困惑,为什么会有人想要这个。Insimwytim(https://news.ycombinator.com/item?id=49113869):
> 我觉得很多人(以及整个行业)都在不必要地把事情复杂化。
## 在合并拉取请求时
在工作中,我们也有类似的讨论:将拉取请求合并到主分支时,squash 是否是个好主意。
变基的人如果自己精心打造的历史被 squash 合并毁掉,会非常生气。他们更喜欢合并提交,这样每个提交都能被保留。
频繁提交的人喜欢 squash 合并,因为它让历史更干净、更容易阅读。虽然把分支上的每一步都保留为单独的提交可能有用,但主分支上并不需要这种混乱的历史。
## 谁是对的?
就我个人而言,我更像一个变基派。然而,这需要纪律,而这在较大的组织中很难维持。如果没有非常严格地执行干净历史的要求,那么 git 历史最终会变得一团糟。根据破窗理论(https://en.wikipedia.org/wiki/Broken_windows_theory),它会变得更糟,团队的变基派最终会放弃。
因此,频繁提交似乎是更具韧性的做法,抵抗基本上是徒劳的。所以除非我对某个 git 仓库拥有权威,否则我会与混乱的历史和平共处。
有两种 git 用户:那些频繁提交的人,以及那些仔细变基的人。
相似文章
Git history 命令值得更多关注
文章重点介绍了新的 `git history` 命令及其 `fixup`、`reword` 和 `split` 子命令,这些命令提供了原子化且感知分支的提交历史编辑功能,带来了类似 jj 的益处,而无需切换版本控制系统。
@GergelyOrosz:实际上,关于堆叠差异(又称堆叠式拉取请求)这个概念,你需要了解的是,这篇深度文章写于……
Gergely Orosz 分享了 Pragmatic Engineer 关于堆叠差异的深度解析,解释了这一由 Meta 和 Google 推广的概念,以及 GitHub 新的公开预览如何使其更容易使用。
Git 2.54 亮点速览
Git 2.54 带来全新的实验性 `git history` 命令,可在不碰工作区的情况下重写或拆分提交,另有 137 位贡献者带来的其他改进。
@github: Git 2.55 带来了新的增量重新打包策略、更灵活的历史编辑方式,以及更多功能。查看…
Git 2.55 已发布,引入了使用多包索引的增量重新打包策略、更灵活的历史编辑方式,以及来自超过100位贡献者的贡献。
@cognition: Devin 现在原生支持 @Github Stacked PRs ▪︎ 将大型变更拆分为更小、更易审查的差异 ▪︎ 处理…
Devin 现在原生支持 GitHub Stacked PRs,使开发者能够将大型变更拆分为更小的差异,跨栈修复评论,并自动变基下游变更。