最推荐用 git for-each-ref 查所有本地分支最新提交的作者和时间,因其直接读取 ref 数据库、不依赖 reflog、不受当前分支影响;而 git log -1 仅适用于当前分支。

git log 查看分支最新提交的作者和时间
直接用 git log -1 就能拿到当前分支 HEAD 指向的那次提交的完整信息,包括作者、邮箱、提交时间、提交信息。加 --pretty=format 可以定制输出,比如只看人名和时间:
git log -1 --pretty=format:"%an %ae %ad %s"
其中 %an 是作者名,%ae 是作者邮箱,%ad 是作者时间(注意不是提交时间 %cd),%s 是提交标题。如果想看最近 3 次提交的作者和时间,把 -1 改成 -3 即可。
git for-each-ref 获取所有分支的最后更新人和提交哈希
要批量查多个分支(比如远程分支或所有本地分支)谁最后改过,git for-each-ref 比 git branch -v 更可靠——后者可能显示过期的本地引用,而 for-each-ref 直接读 ref 数据库:
git for-each-ref --sort=-committerdate refs/heads/ --format="%(refname:short) %(authorname) %(authoremail) %(committerdate:iso8601) %(objectname:short)"
关键点:
-
refs/heads/表示只查本地分支;换成refs/remotes/origin/可查远程跟踪分支 -
%(authorname)和%(committername)可能不同(如 PR 合并时),通常关心的是实际写代码的人,优先用author相关字段 -
--sort=-committerdate按提交时间倒序,但注意:这是“提交时间”,不是“推送时间”;分支最后更新人 ≠ 最后一次 push 的人
git show-branch 无法直接显示作者,别被误导
git show-branch 看分支拓扑很直观,但它默认不输出作者或时间,只显示提交哈希和简略消息。强行加 --sha1-name 或 -v 也只补充提交内容,不带元数据。真要查分支最后更新人,它不是合适工具——容易误以为能一并解决,结果白折腾。
常见错误现象:
- 运行
git show-branch feature/login,发现输出里没有作者名,以为参数漏了 - 试图用
git show-branch --format,但该命令根本不支持--format参数,会报错unknown option `format`
注意:分支“最后更新”不等于“最后提交人”
分支指针本身可以被任意人移动,比如用 git push --force-with-lease origin main 强制覆盖远程分支,这时“最后更新人”是执行 push 的人,但真正代码变更的作者可能是另一个人。Git 不记录“谁移动了分支”,只记录“谁创建了提交”。所以:
- 查“谁写了代码”,盯
author字段 - 查“谁把代码合进来了”,看 merge 提交的
committer(尤其是 CI 自动合并时) - 查“谁最后推了这个分支”,得结合 Git 服务器日志(如 GitHub/GitLab 的 audit log),Git 本地命令做不到
本地命令能确认的,只有提交对象本身的作者和提交者信息。分支头指向哪次提交,就只能追溯到那次提交的元数据。


















