Git 查看提交历史:3 种 git log 用法讲清,含筛选与格式化

编程狮(w3cschool.cn) 2026-10-05 07:04:47 浏览数 (27)
反馈

Git 查看提交历史git log 三种用法

你想回顾某次改动是谁、什么时候提交的,或者只看成自己写的部分,git log 该怎么用才顺手?Git 查看提交历史有 3 种常用做法:用基础 git log 看完整记录、用 git log --oneline --graph 看精简图形、以及用 --author 与 --pretty=format 做筛选和定制输出。选错方式最常见的问题是记录太长刷屏、或者找不到想要的某次提交。本文以 Git 2.x 为例,从最小场景讲到三种用法的边界与常见失败,并给出一份实操清单,帮你快速定位任意提交。

先看结论

你的意图 命令 注意点
看完整提交记录 git log 信息全但容易刷屏
看精简图形拓扑 git log --oneline --graph 一眼看清分支走向
只看成自己/某段时间 git log --author= --since= 配合 --pretty=format 导出

一句话:日常回看用 --oneline --graph 最省心;要找特定提交用 --author 和 --since 筛选;要生成变更清单用 --pretty=format 定制。

一、最小场景与预期结果

先确认仓库里已经有提交,再开始回顾;如果是刚 clone 的空仓库,先提交一两条再回来试,否则 log 什么都没有。

git log --oneline -5
# 预期:最近 5 条提交,每行一条,形如 a1b2c3d 修复登录校验

先过一遍 Git 教程 理解提交对象与父子关系,git log 本质就是沿着提交链往前遍历。实操清单:回看前先 git log --oneline -5 看近期;要找某次提交就叠加筛选参数;要导出清单就用 --pretty=format。这一步的预期是:能看到一串提交,每条带短哈希、作者、时间和说明,最上面是最近一次。如果什么都没有,说明还没提交过,先 git commit 一条再回来试。

二、方法一:基础 git log 与精简图形

最朴素的 Git 查看提交历史就是直接敲 git log,它会按时间倒序列出全部提交及完整信息。

git log                        # 完整信息,空格翻页、q 退出
git log --oneline --graph -10  # 每行一条、画出分支合并图

命令与运行:执行 --oneline --graph 后预期每条提交压缩成"短哈希 说明"一行,分支分叉和合并会用 * 与 | 画出来,比裸 git log 直观得多。检查:若记录太长,加 -n 20 限制条数;在图形里看不清某次合并来自哪个分支,就补 --all 把全部分支的提交都画出来。失败处理:裸 git log 会刷屏淹没重点,默认加 --oneline -20 或 --graph 收束视野。常用参数可查 Git 速查手册 里的 log 章节。想只看最近一段时间的提交,可叠加 -n 20 或 --since,避免一次倒出几百条;-p 还能把每次提交改了哪些行一并显示,定位"某行是谁改的"时很好用。

git log 完整信息与 --oneline --graph 精简图形对照

三、方法二:用 --author 与 --since 做筛选

当提交很多、只想看成自己写的部分,或只查某段时间的改动,用筛选参数最省事。

git log --author="张三"                 # 只看某作者的提交
git log --since="2026-09-01" --until="2026-09-30"   # 只看 9 月
git log --grep="修复"                   # 说明里含"修复"的提交

运行预期:只返回命中的提交,不再被无关记录淹没。把筛选条件写在同一条命令里,比事后肉眼翻更可靠。检查:用 --grep 搜关键词时若没结果,多半是大小写不匹配,加 -i 忽略大小写。失败处理:--author 按提交者姓名/邮箱匹配,若团队用昵称提交,就得多试几个关键字;CI 机器人的提交要单独用其邮箱过滤。要撤销某次找到的提交,流程上要先靠 log 定位哈希,再用 revert 安全回退(回退细节可看延伸学习)。

四、方法三:--pretty=format 定制与边界避坑

需要把提交整理成清单、或者只要特定字段时,用 --pretty=format 自己定义格式。

git log --pretty=format:"%h | %an | %ad | %s" --date=short
# 预期每行:a1b2c3d | 张三 | 2026-09-10 | 修复登录校验

git log --pretty=format:"%h %s" --author="张三" > changes.txt
# 把某人提交导出成纯文本清单

%h 是短哈希、%an 是作者、%ad 是日期、%s 是说明,组合起来就能生成周报式清单。关于提交链与哈希的来龙去脉,Git Magic 教程 讲得更系统,它把提交对象、父子指针和短哈希的关系拆得很清楚。运行预期:每行按你定义的字段输出;重定向到文件即得到清单。检查:--date=short 控制日期格式,否则默认带时分秒;--graph 配合 --all 还能把全部分支的合并走向一起画出来。失败处理:导出到文件时若含中文,终端编码要统一为 UTF-8,避免乱码;%ad 必须与 --date 配合才生效。

边界、反例与常见失败一并放在这里:

  • 裸 git log 刷屏:记录几百条时直接 log 会淹没重点,默认加 --oneline -20 或 --graph 收束视野。
  • author 匹配不到:按提交邮箱而非显示名,或昵称不一致,多试关键字;CI 机器人的提交要单独用其邮箱过滤。
  • grep 大小写漏结果:需要不区分大小写务必加 -i,否则"修复"匹配不到"Fix"。
  • 图形看不清合并来源:分支多时用 --all --graph 把所有分支都画进来,别只看当前分支。

git log --pretty=format 定制字段与导出清单示例

总结

Git 查看提交历史有 3 种常用做法,选型看场景:

  • 回看整体脉络,用 git log --oneline --graph 最直观;
  • 找特定提交,用 --author / --since / --grep 精准筛选;
  • 生成变更清单,用 --pretty=format 定制字段并导出。

记住 log 是"只读"操作,翻得再花也不会动到你的代码,放心大胆地用参数组合过滤。遇到记不清参数时,随时用 git help log 看完整列表,比上网搜更快。

延伸学习

想把这块知识系统补齐,可以按这个顺序来:

  1. 想跟着课程动手练,Git 入门实战课程 是边学边写的形式;
  2. 看回退与恢复的安全操作,Git 撤消最后一次提交笔记 适合延伸阅读;
  3. 需要更完整的命令参考,Git 官方中文手册 适合随时查阅。

常见问题

Q:git log 和 git reflog 有什么区别?

A:git log 看的是"提交历史",记录已经形成的提交;git reflog 看的是"本地操作记录",包括 checkout、reset 这些移动指针的动作。想找回被 reset 丢掉的提交,log 里可能看不到,但 reflog 里通常还在。

Q:为什么 git log 看不到别人刚推的提交?

A:因为本地仓库的提交记录还没更新。先 git fetch 把远端提交拉到本地,再用 git log origin/main 指定看远端分支,或者 git pull 合并后再看,就能看到别人的提交。

Q:怎么只看某个文件是谁改的?

A:用 git log -- 文件名 只看涉及该文件的提交;想看具体每行是谁改的,用 git blame 文件名,它会逐行标注作者和提交哈希,定位"谁引入了这行"特别好用。

Q:怎么把 git log 的结果导出成周报清单?

A:用 git log --pretty=format:"%h | %an | %ad | %s" --date=short --author="张三" > changes.txt 把某人某段时间的提交导出成纯文本,每行一条、字段固定,直接贴进周报即可;要全员的就去掉 --author。若导出时中文乱码,先 chcp 65001 把终端切到 UTF-8 再执行,避免清单变成乱码。

0 人点赞