2026 年 9 月 28 日,GitHub 官方博客介绍开源 Git 项目发布的 Git 2.56.0。该版本包含来自 104 位以上贡献者的功能与修复,其中 39 位是首次贡献者。GitHub 重点介绍新的 git add --resolved:它只处理索引中当前未合并的路径,并在暂存前扫描这些文件是否仍残留冲突标记。本文从开源生态视角解读。
更精确的冲突处理
解决合并冲突分两步:先把工作区改到想要的结果,再暂存这些路径以告知 Git 冲突已解决。官方指出,第二步很容易“多暂存”:git add -u 会更新所有已修改的受跟踪路径,其中可能包含与冲突无关的本地改动,也可能把仍带冲突标记的文件一并暂存。Git 2.56 的 git add --resolved 只考虑索引中当前未合并的路径,暂存前扫描未合并的普通文件是否残留冲突标记,若发现则报告受影响路径并保持索引不变;该模式刻意比 git add -u 或 -A 更窄,且不能与二者组合使用。
合并基查找的性能改进
许多 Git 操作都需要找到两个提交的最佳共同祖先,合并、三点差异与代码托管平台的 PR 差异都依赖这一计算。旧有的停止规则会在已有合并基不可能出现后,继续处理一长串陈旧的公共历史。Git 2.56 改为跟踪两侧各自独占的排队提交数量,一旦某一侧耗尽即可停止。官方给出的真实案例中,一个 monorepo 的遍历从 0.68 秒降到 0.01 秒;两个大型 monorepo 的生产评估显示,一个约有 70 倍提升,另一个平均约 20 倍;Linux 内核场景下 git merge-base --all v4.8 v4.9 从 167,441 步、0.29 秒降至 3,887 步、0.01 秒。
更小的重打包体积
路径遍历(path-walk)重打包按对象在目录树中的位置访问对象,把同一路径的不同版本聚在一起,往往能找到更好的增量关系。官方用 Fluent UI 仓库做基准,普通位图重打包得到 558.5 MB 的包,使用 --path-walk 则为 164.4 MB,约小 71%。此前该方式与可达性位图、增量孤岛不兼容,限制了托管平台的采用;Git 2.56 解除了这两项限制,让大型托管方可评估其存储收益,而不必放弃快速的位图服务与孤岛隔离规则。
其他值得关注的变化
实验性的 git history 命令新增 drop;引用管理继续收敛到 git refs 工具箱,提供 create、update、delete 与 rename 子命令,并支持比较并交换语义;git branch 新增批量清理已合并分支的 --delete-merged;git bisect run 新增 --reset-when-found;实验性的 git replay 支持 --linearize 压平合并拓扑;部分克隆可用 git repack --drop-filtered 丢弃可重新拉取的大对象(该工作来自 Google Summer of Code 项目);git log --follow 改为按每个父提交分别记录路径,使结果不再依赖遍历顺序。
小结
GitHub 于 2026 年 9 月 28 日介绍 Git 2.56.0,以 104 位以上贡献者、git add --resolved 的精确冲突暂存、合并基查找的数十倍提速与约 71% 的包体缩减为看点,是开源生态领域一次兼顾易用性与大规模托管性能的版本更新。