生活分享

Git 2.56 发布:新增更安全的冲突暂存方式,合并基底搜索提速,path-walk 重新打包更适合托管平台

GitHub 博客 2026 年 9 月 28 日介绍,开源版本管理工具 Git 发布 2.56.0 版。新版新增 git add --resolved,只暂存已解决的冲突文件,并加快合并基底搜索。它还让 path-walk 重新打包可与 bitmap 和 delta islands 一起使用。这些改动对日常处理合并冲突的开发者和托管大型仓库的平台最有意义。

阅读时间约 7 分钟

Git 2.56 发布:新增更安全的冲突暂存方式,合并基底搜索提速,path-walk 重新打包更适合托管平台
图片:Mokaair (Original editorial artwork)

发生了什么事

Git 是开发者最常用的代码版本管理工具。GitHub 博客于 2026 年 9 月 28 日刊出由 Elijah Newren 撰写的文章,称开源 Git 项目刚发布 Git 2.56.0。据 GitHub 所述,这个版本收录了来自超过 104 名贡献者的功能与错误修复,其中 39 人是新贡献者。文章挑选了 GitHub 认为最值得关注的改动,重点有三项:更安全的冲突暂存方式、更快的合并基底搜索,以及让 path-walk 重新打包更适合服务器使用。

三大重点改动

Git 2.56 发布:新增更安全的冲突暂存方式,合并基底搜索提速,path-walk 重新打包更适合托管平台
Mokaair 编辑核查流程 · 图片:Mokaair (Original editorial artwork)
阅读完整文字说明

消息会先收集来源、独立核查,再交由 Jev 判断。

git add --resolved:只暂存已解决的冲突

合并两条开发分支时,如果同一处内容被双方改动,Git 会报告“合并冲突”,并在文件中插入冲突标记,等待开发者手动处理。处理完毕后,开发者需要“暂存”这些文件,也就是把改动放进下一次提交的准备区(Git 称为索引),告诉 Git 冲突已解决。据 GitHub 解释,常用的 git add -u 会更新所有已修改的跟踪路径。因此它可能把与冲突无关的本地修改一并暂存,甚至暂存仍含冲突标记的文件。Git 2.56 新增的 git add --resolved 只考虑索引中当前未合并的路径,并在暂存前扫描这些文件是否残留冲突标记。一旦发现残留标记,它会列出受影响的路径,并保持索引不变。

GitHub 文章中的 git add --resolved 示例 · shell
$ git add --resolved
fatal: the following paths still have conflict markers: recipe.txt
$ # Edit recipe.txt and remove the conflict markers.
$ git add --resolved
$ git status --short
 M notes.txt
M  recipe.txt

在这个示例中,第一次执行时 recipe.txt 仍有冲突标记,Git 拒绝暂存。清除标记后再执行,recipe.txt 被暂存为已解决,而与冲突无关的 notes.txt 修改仍保持未暂存。GitHub 补充说,可以用 pathspec(路径筛选条件)限制处理范围,但在所选范围内检查是全有或全无的。已解决的删除和二进制文件冲突没有文本标记,可以正常暂存。这个模式不能与 git add -u 或 git add -A 同时使用,并会忽略从未发生冲突的跟踪文件。

合并基底搜索可提早停止

“合并基底”是两个提交的最佳共同祖先,也就是两条分支分开之前最近的共同起点。合并、三点 diff 以及托管平台的 pull request 比较,都需要先找出它。据 GitHub 所述,旧的停止规则存在一个问题:即使已经不可能再出现新的合并基底,Git 仍可能继续处理大量旧历史。Git 2.56 会跟踪队列中仍只被单一一方标记的提交数量。一旦其中一方耗尽,Git 就可以停止,同时仍返回所有合并基底。

path-walk 重新打包可配合 bitmap 与 delta islands

Git 会定期“重新打包”(repack)仓库,找出相似的对象,只存储它们之间的差异,以节省空间。据 GitHub 所述,path-walk 方式按文件在目录树中的位置遍历对象,往往能找到更好的差异压缩关系。托管平台常用两项机制:一是可达性位图(reachability bitmap),用来快速列出需要传输的对象;二是 delta islands,用来防止一组引用中的对象依赖只存在于另一组中的对象。过去 path-walk 与这两项机制都不兼容,Git 2.56 移除了这两项限制。不过 GitHub 强调,新版并未默认启用 path-walk 重新打包,只是让大型仓库托管方可以评估它能节省多少存储空间。

GitHub 公布的性能数字对照

数字均来自 GitHub 博客文章;实际效果取决于仓库结构。
场景改动前Git 2.56 / 新做法来源说法
真实 monorepo(集中存放大量项目的单一仓库)合并基底遍历0.68 秒0.01 秒GitHub 引述的单一案例
Linux 内核 git merge-base --all v4.8 v4.9167,441 步、0.29 秒3,887 步、0.01 秒使用默认 v2 commit-graph
两个大型 monorepo 生产评估—一个多数案例快约 70 倍;另一个平均快约 20 倍GitHub 所述评估结果
Fluent UI 仓库 repack 大小558.5 MB(常规带 bitmap repack)164.4 MB(--path-walk)约小 71%,强制重算差异的基准测试

其他值得关注的新命令

  • git history drop:据 GitHub 所述,实验性的 git history 于 Git 2.54 推出 reword 与 split,Git 2.55 加入 fixup,Git 2.56 再加入 drop。drop 用于移除选定的提交,并把其后的提交重放到它的父提交上。如果重放会产生冲突或覆盖本地修改,命令会中止。它不能处理含合并提交的历史,也不能移除根提交或合并提交。
  • git refs 工具:“引用”是指向提交的名字,例如分支名。Git 2.56 继续把底层的引用管理命令集中到 git refs,包括 create、update、delete 和 rename。GitHub 指出,git refs rename 会移动引用及其 reflog(引用变动记录),但不会像 git branch -m 那样调整分支配置。
  • git branch --delete-merged:GitHub 表示,新版加入了批量清理本地主题分支的方式,适用于工作已在上游合并的分支。文章示例附带 --dry-run 选项。

对普通用户有什么影响

对日常使用 Git 的开发者而言,最直接的变化是 git add --resolved。在合并时已有无关本地修改的情况下,它提供了一道安全护栏,减少把未完成的冲突或无关改动一并暂存的失误。合并基底搜索的改进主要影响历史庞大、合并过大量旧分支的仓库。path-walk 相关改动则主要与仓库托管方有关。非开发者一般不会直接接触这些改动,但所使用的代码托管服务日后可能因此受益。是否升级、何时升级,应按团队自身的工具链与兼容性需要决定。

常见问题

Git 2.56 是什么时候发布的?

GitHub 博客于 2026 年 9 月 28 日发文,称开源 Git 项目刚发布 Git 2.56.0。

git add --resolved 和 git add -u 有什么区别?

据 GitHub 所述,git add -u 会暂存所有已修改的跟踪文件。git add --resolved 只处理当前未合并的冲突路径,发现残留冲突标记时不会暂存任何所选文件。两者不能同时使用。

新版会自动让仓库变小吗?

不会。GitHub 表示 Git 2.56 并未默认启用 path-walk 重新打包。新版只是移除了它与 bitmap 和 delta islands 不兼容的限制,让托管方可以评估。

git history drop 可以放心在正式项目中使用吗?

GitHub 称 git history 仍属实验性质。它不能处理含合并提交的历史,也不能移除根提交或合并提交。使用前宜先了解这些限制。

这些性能数字适用于我的仓库吗?

不一定。这些数字全部来自 GitHub 的博客文章,是该机构引述的个别案例与基准测试,实际效果视仓库而定。

查看同分类最新消息

最新旅游情报攻略

资料来源

生活分享