Git 2.54 发布:新增 `git history` 命令、配置文件定义钩子、几何重打包成为默认维护策略
-
Git 2.54 于 4 月 20 日正式发布,来自 137 名贡献者(66 名首次参与)的提交合并进入这一版本,同时覆盖 2.53 的新特性。最大亮点是新增实验性命令
git history,提供reword与split两个子命令:git history reword <commit>可直接在编辑器中修改任意历史提交的提交信息,并自动更新所有下游分支,全程不触碰工作区或暂存区,甚至支持裸仓库;git history split <commit>则以类似git add -p的交互界面将一个提交拆分成两个,自动重写后代分支——该命令底层基于git replay的核心库,有意不支持含 merge commit 的历史、也不允许产生冲突,定位为"精准、非交互式历史改写"而非rebase -i的替代。另一重要特性是配置文件定义钩子:不再要求把脚本放入.git/hooks/目录,可直接在~/.gitconfig或系统级配置中以[hook "name"] event = pre-commit的形式声明钩子,多个钩子可绑定同一事件并按顺序执行,支持通过hook.<n>.enabled = false单独禁用,git hook list可查看来源。功能更新层面,
git maintenance run的默认维护策略由gc切换为 2.52 引入的geometric——后者通过增量合并满足几何级数关系的 packfile,避免昂贵的全量 GC,同时保持 commit-graph 与 reflog 最新;git replay新增原子引用更新(不再向 stdout 打印 update-ref 命令)、--revert模式与根提交支持;git log -L路由经标准 diff 管线,首次与-S、-G、--word-diff、--color-moved兼容;HTTP 传输新增 429 重试机制,支持Retry-After头与http.retryAfter、http.maxRetries、http.maxRetryTime配置;git rebase新增--trailer选项可批量为所有被 rebase 的提交附加 trailer;git blame支持--diff-algorithm参数;alias 命令名限制从 ASCII 字母数字放开至任意字符(通过 subsection 语法),使 “状態” 或 “hämta” 这样的本地语言别名成为可能;此外 MIDX 增量索引新增 compaction 支持,为长期运行的大型仓库提供更可持续的多层压缩。
Highlights from Git 2.54
The open source Git project just released Git 2.54. Here is GitHub’s look at some of the most interesting features and changes introduced since last time.
The GitHub Blog (github.blog)