分支一多,git branch 默认按名称排序就不太方便了。想找最近还在使用的分支,通常只能逐个查看它们的最后一条提交记录。
其实 Git 已经支持直接按提交时间排序,不需要再写 Shell 循环。
临时按最后提交时间排序
按最后一次提交时间从新到旧显示本地分支:
git branch --sort=-committerdate
--sort 接收一个排序字段,字段前面的 - 表示倒序。因此下面这条命令会从旧到新排列:
git branch --sort=committerdate
例如,分支列表可能变成这样:
* main
feature/payment
fix/mobile-menu
experiment/new-cache
当前分支仍然会用 * 标记。这里只是改变了显示顺序,不会修改分支,也不会改变当前工作区。
同时查看提交摘要
加上 -v 可以同时看到每个分支指向的提交 SHA 和提交标题:
git branch -v --sort=-committerdate
如果还想查看上游分支关系,可以使用 -vv:
git branch -vv --sort=-committerdate
这比先排序、再逐个执行 git log -1 更适合日常检查分支。
查看远程分支
git branch 默认只列出本地分支。使用 -r 可以只查看远程跟踪分支:
git branch -r --sort=-committerdate
使用 -a 可以同时列出本地分支和远程跟踪分支:
git branch -a --sort=-committerdate
远程分支显示的是本地仓库中的远程跟踪引用。如果想让结果尽量接近远程仓库的最新状态,可以先获取更新:
git fetch --all --prune
git branch -r --sort=-committerdate
配置成默认排序方式
如果经常使用这个排序方式,可以写入当前仓库的配置:
git config branch.sort -committerdate
以后直接执行下面的命令,就会按最后提交时间从新到旧显示:
git branch
如果希望所有仓库都使用这个设置,加上 --global:
git config --global branch.sort -committerdate
不想使用自定义排序时,可以删除对应配置:
git config --global --unset branch.sort
也可以使用 git config --get branch.sort 检查当前仓库最终使用的配置值。
committerdate 和 authordate 的区别
常用的日期字段主要有两个:
committerdate:提交被提交者写入当前历史的时间。authordate:原作者创建这次改动的时间。
日常查看“哪个分支最近更新过”时,通常使用 committerdate:
git branch --sort=-committerdate
如果更关心改动最初由作者产生的时间,可以改用:
git branch --sort=-authordate
经过 Rebase、Cherry-pick 或提交转移后,作者时间和提交时间可能不同。这个场景下,选择哪个字段取决于你想观察的是“改动产生时间”还是“当前历史更新时间”。
需要显示精确日期时
git branch -v 主要显示 SHA 和提交标题。如果还需要把日期打印出来,可以直接使用 git for-each-ref:
git for-each-ref \
--sort=-committerdate \
--format='%(committerdate:short) %(committerdate:relative) %(refname:short)' \
refs/heads/
输出类似:
2026-09-12 3 hours ago main
2026-09-10 2 days ago feature/payment
2026-08-28 2 weeks ago experiment/new-cache
这里的 %(committerdate:short)、%(committerdate:relative) 和 %(refname:short) 都是 Git 提供的引用格式字段,不需要额外脚本处理。
它不能告诉你分支是什么时候创建的
按 committerdate 排序的实际含义是:比较每个分支当前指向的提交时间。
它不是分支创建时间,也不是最后一次 Push 时间。例如,一个很久以前创建、最近刚提交过代码的分支会排在前面;一个刚创建但还没有新提交的分支,时间可能和它的起点提交相同。
所以这个命令适合回答:
哪些分支最近还有提交活动?
但不适合单独用来判断:
哪些分支可以安全删除?
清理分支时,还应该结合合并状态和远程状态检查,例如:
git branch --merged main
git branch -vv
总结
最常用的写法只有两条:
# 临时使用
git branch --sort=-committerdate
# 永久作为默认排序
git config --global branch.sort -committerdate
--sort 不只支持日期,也可以使用 refname、version:refname、authordate 等字段。遇到“想按某个属性排列 Git 引用”的需求时,可以先查看 git for-each-ref 支持的字段,很多情况下不需要再写一段循环脚本。
参考:Sort branches by last commit date、git-branch 官方文档、git-for-each-ref 官方文档。