git log 默认输出简略,需加参数提升可读性:--oneline压缩单行,--graph --all --decorate显示分支图,--date=short简化日期;查特定提交可用--author、--since、--grep等组合筛选。

直接看提交历史,用 git log 就够了;但默认输出太简略,不加参数基本没法用。
怎么让 git log 显示更清晰的提交列表
默认的 git log 只显示完整 commit hash、作者、日期和提交信息,一行一个,往上翻几十页都找不到自己要的那次提交。
- 加
--oneline:每条记录压缩成一行,git log --oneline - 加
--graph+--all+--decorate:画出分支合并图,标出分支名和 tag,适合多人协作项目:git log --graph --all --decorate --oneline - 加
--date=short:把日期从Mon Jun 10 14:22:31 2024 +0800缩成2024-06-10,省空间也易读
git log 查某个人、某个文件、某段时间的提交
日常查问题经常不是“看全部”,而是“谁改了这个文件”“上周谁合了 PR”“我自己的提交在哪”。
- 查某人提交:
git log --author="zhangsan"(注意大小写敏感,双引号防 shell 解析空格) - 查某个文件的修改历史:
git log -- path/to/file.js(--是分隔符,避免路径被误认为参数) - 查最近 7 天的提交:
git log --since="7 days ago",支持"2024-06-01"、"last week"等自然写法 - 组合用更准:
git log --author="lisi" --since="2024-06-01" --oneline
为什么 git log 找不到刚 git commit 的记录
最常见原因是当前不在目标分支上,或者刚提交但没推送到远程,而你却在另一个分支或 detached HEAD 状态下执行命令。
- 先确认当前分支:
git branch,星号标出的是当前所在分支 - 检查是否在 detached HEAD:
git status会明确提示 “HEAD detached at abc123” -
git log默认只显示当前分支能到达的提交;如果刚在 feature 分支提交,却切到 main 再查,自然看不到 - 想看所有本地提交(不管分支指向),加
--all参数:git log --all --oneline
性能差?日志卡住?这些参数别乱加
git log 在大仓库里容易变慢,尤其带 --grep 或 --pickaxe 这类全文扫描参数时,可能卡住几秒甚至更久。
-
--grep是正则匹配提交信息,不加-i默认区分大小写,常导致搜不到 -
-S<string></string>(pickaxe)查代码行增删,但会遍历每个 commit 的 diff,大数据量仓库慎用 - 避免无限制翻页:
git log默认不分页,输出几千行终端会卡;加--max-count=50或用git log | head -20 - 真要查全量又快:用
git log --no-pager配合less手动翻,比默认 pager 更稳
真正难的不是记参数,是每次敲之前想清楚——你要的到底是“谁干的”“在哪改的”还是“啥时候合的”。参数只是把问题翻译给 Git 听,听错就白忙活。











