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..feature | feature 独有、main 没有的提交 | 看分支还没合入什么 |
| --not main | 排除某分支可达的提交 | 从主干视角筛选分支提交 |