branch.sort 配置项只接受 git 内置字段名(如 committerdate、authordate、refname、version:refname),加可选 - 前缀表示倒序;必须通过 git config 设置才生效,且仅影响 git branch(不含 -r)的本地分支排序,填错会静默失效。

branch.sort 配置项到底能填什么值?
它只接受一个字符串参数,且必须是 Git 内置的字段名(加可选的 - 前缀表示倒序),不是任意表达式或函数。常见合法值包括:committerdate、authordate、refname、version:refname。填错会静默失效——git branch 仍能运行,但排序不变。
-
refname按分支名字典序升序(默认行为) -
-refname字典序降序 -
committerdate按最新提交时间升序(最旧在前) -
-committerdate最新提交在前(最常用) -
version:refname对含数字的分支名做自然排序,比如release/1.9在release/1.10前
如何设置才真正生效?
必须用 git config 设置全局或仓库级配置,仅改命令别名或 alias 不影响 git branch 的原生排序逻辑。
- 全局设置(所有仓库):
git config --global branch.sort -committerdate - 当前仓库设置:
git config branch.sort -committerdate - 验证是否写入:
git config --get branch.sort(返回-committerdate才算成功) - 注意:该配置不影响
git for-each-ref或第三方工具(如 VS Code Git 插件),只作用于git branch命令本身
为什么设置了却没看到排序变化?
最常见原因是:你正在看的是远程分支列表(git branch -r),而 branch.sort 只控制本地分支(git branch)排序。远程分支始终按 refname 字典序排列,无法通过此参数干预。
- 检查命令是否带
-r、-a或--format—— 这些都会绕过branch.sort - Windows 上若 Git 安装在路径含空格的位置,某些旧版本 Git 会忽略配置(升级到 2.35+ 可解决)
- 如果用了
git config --local但在子模块中执行git branch,实际读取的是子模块自己的配置,而非父仓库
想按自定义规则排序怎么办?
branch.sort 不支持脚本、正则或复合条件。真要按团队规范排序(比如 feat/ 在前、fix/ 居中、hotfix/ 置顶),只能绕过它:
- 用
git for-each-ref+sort组合:git for-each-ref --format="%(refname:short)" refs/heads/ | sort -V | sed 's/^/* /' - 写个 shell 函数塞进
~/.bashrc,把排序逻辑固化 - 注意:
git branch输出带颜色和符号(如*当前分支),而for-each-ref是纯文本,需自行补全这些视觉标记
别指望 branch.sort 能替代脚本逻辑——它只是个轻量字段排序开关,不是查询引擎。











