如何按最近提交时间排序列出 Git 分支
按最近提交排序列出分支:git for-each-ref --sort=-committerdate refs/heads/ --format 自定义输出;远程分支换 refs/remotes/。简版用 git branch --sort=-committerdate。适合清理久未更新的陈旧分支。
用 git for-each-ref --sort=-committerdate:- 前缀表示倒序(最新的在前),配合 --format 自定义输出字段。简单场景 git branch --sort=-committerdate 也行,但 for-each-ref 的格式控制更强大。
常用命令
# 本地分支按最近提交倒序
git for-each-ref --sort=-committerdate refs/heads/ --format='%(committerdate:short) %(refname:short)'
# 包含远程分支
git for-each-ref --sort=-committerdate refs/heads/ refs/remotes/ --format='%(committerdate:iso8601) %(refname:short) %(authorname)'
# 简版
git branch --sort=-committerdate
常用格式字段
| 字段 | 含义 |
|---|---|
%(refname:short) |
分支短名 |
%(committerdate:iso8601) |
提交时间(ISO 格式) |
%(authorname) |
作者 |
%(subject) |
提交说明首行 |
%(upstream:short) |
跟踪的远程分支 |
实用场景:清理陈旧分支
# 找出 90 天没有提交的分支
git for-each-ref --sort=committerdate refs/heads/ --format='%(committerdate:short) %(refname:short)' | head -20
配合 git branch --merged 筛出已合并的,可以列一份"安全删除候选清单"。
常见问题(FAQ)
Q:committerdate 和 authordate 有什么区别?
author 是代码"写"的时间,committer 是提交"产生"的时间(rebase/amend 会更新后者)。看分支活跃度用 committerdate 更准。
Q:能输出成别的格式吗(如 JSON)?
Git 2.38+ 支持 --format='%(refname)' 的 shell/python 引用风格,脚本里处理建议用 %(refname)|%(committerdate:unix) 这类分隔符格式再解析。
Q:想直接看图形化分支时间线?
git log --oneline --graph --all --date-order 更适合看分支之间的关系;for-each-ref 适合出清单报表。