Skip to content
Charles
Go back

Git 按最后提交时间排序分支

Edit page

分支一多,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 检查当前仓库最终使用的配置值。

committerdateauthordate 的区别

常用的日期字段主要有两个:

日常查看“哪个分支最近更新过”时,通常使用 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 不只支持日期,也可以使用 refnameversion:refnameauthordate 等字段。遇到“想按某个属性排列 Git 引用”的需求时,可以先查看 git for-each-ref 支持的字段,很多情况下不需要再写一段循环脚本。

参考:Sort branches by last commit dategit-branch 官方文档git-for-each-ref 官方文档


Edit page
Share this post:

Previous Post
Git 一次 Cherry-pick 一段连续提交