首页/开发/Git 与协作速查/git log 查看提交历史
Git 基础与命令88 条

git log 查看提交历史

浏览提交历史:-n 限制条数、--oneline 简洁输出、--no-merges 过滤合并提交;是定位改动与复盘的起点命令。

Git 与协作速查开发更新于 2026-10-13

git log 是什么

git log 按时间倒序列出当前分支可达的提交,每条包含提交哈希、作者、日期与提交信息。默认只显示当前分支,加 --all 才覆盖全部分支;输出交给分页器,按 q 退出。它是定位改动、复盘与追责的起点命令。

输出高度可定制

除默认格式外,git log 支持 --oneline 一行一条、--graph 画分支拓扑、--stat 附文件改动统计、-p 直接附补丁,以及 --pretty/--format 用占位符自定字段。脚本里更稳的做法是 git log -1 --format=%H 只取哈希,不要解析默认的人类可读输出。

基本信息

适用平台Linux / macOS / Windows(Git 2.x)
语法git log [选项] [范围] [--] [路径]
默认范围当前分支可达的提交,按时间倒序
显示参数-n 条数;--oneline;--graph;--stat;-p
过滤参数--author;--grep;--since/--until;--no-merges
是否分页是,长输出交给分页器,按 q 退出

典型使用场景

  • 复盘:查看最近提交,确认改动顺序与负责人
  • 定位:只看某个目录或文件的改动历史
  • 追溯:按作者或关键词筛出可疑提交再用 git show 展开
  • 出报告:用 --since/--until 统计某段时间的改动
  • 脚本取值:用 -1 --format=%H 拿哈希交给自动化
  • 排查回归:配合 git bisect 或区间写法缩小嫌疑范围

常用示例

常用示例
git log                              # 默认倒序显示提交
git log -5                           # 只看最近五条
git log --oneline -10                # 一行一条,便于扫读
git log --graph --oneline --all -20  # 全分支的拓扑视图
git log --no-merges -p -- src/       # 隐藏合并提交,只看某目录补丁
git log --author='Li Wei' --since='2 weeks ago'   # 按作者与时间过滤
git log -1 --format='%H %s'          # 脚本里取哈希与主题行
git log v1.4.0..HEAD --oneline       # 看某个版本之后新增了什么

常见选项读法

选项作用注意
-n <数量>限制输出条数也可写成 -5 这种简写
--oneline一行一条的紧凑格式只含短哈希与主题行
--graph左侧画出分支合并拓扑常与 --oneline --all 组合
--no-merges隐藏合并提交审阅真实改动时更清晰
--stat附每文件增删行统计只给规模,不展开内容
-p附上完整补丁输出量大,先筛后看
-- 路径限定到某文件或目录路径与分支同名时更安全
输出量大时先用 --oneline 定位到目标提交,再用 git show <哈希> 展开细节,比在长输出里来回翻页高效得多。
默认只看当前分支可达的提交,跨分支排查记得加 --all 或直接指定分支名,否则容易误判某个改动根本不存在。
分页器里按 q 退出;脚本中不要解析默认输出,改用 git log -1 --format=... 指定固定字段,避免颜色与终端宽度干扰。

范围与路径的写法

git log 支持在提交之间写区间表达式:A..B 表示 B 有而 A 没有的提交,A...B 表示两边各自独有的提交。范围之后加 -- 再接路径,就能同时限定提交范围与文件范围,例如 git log v1.4.0..HEAD -- src/api。路径与分支同名时,这个分隔符尤其重要,否则 Git 可能把参数当成分支来解析。

脚本里怎么取字段

自动化场景不要解析默认输出。用 --format 或 --pretty 配合占位符能稳定取到所需字段:%H 是完整哈希、%h 是短哈希、%an 是作者名、%ae 是作者邮箱、%ad 是作者日期、%s 是主题行。配合 -1 只取一条,配合 --no-color 去掉着色,输出就完全可预测。

git log 的输出受 core.pager 与颜色配置影响,交互查看时很方便,重定向到文件或管道时建议加 --no-color,避免把控制字符写进结果。
查某一行代码的来历更适合 git blame -L,查某次改动的背景则先 git log --oneline 定位再用 git show 展开,两个命令配合使用效率最高。

区间表达式读法

写法含义典型用途
HEAD~3..HEAD最近三次提交复盘刚做的改动
v1.4.0..HEAD某版本之后的新提交整理发布变更清单
main..featurefeature 独有、main 没有的提交看分支还没合入什么
--not main排除某分支可达的提交从主干视角筛选分支提交

易错点

  • 默认不含其他分支的提交,跨分支排查漏加 --all 会误判改动不存在
  • 脚本里解析默认输出会因分页、颜色与终端宽度而失败,应改用 --format 指定字段
  • 浅克隆下历史不完整,git log 可能查不到早期提交,需要先 git fetch --unshallow 补全
  • 只看提交信息容易误判改动范围,配合 --stat 或 -p 确认实际动到的文件再下结论

数据来源与参考

  • Git 官方文档:git-log
  • Pro Git 2nd Edition · 2.3 查看提交历史
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌