按条件筛选历史是什么
git log 支持在历史里按作者、提交信息关键词、时间窗等条件过滤,多个条件默认取交集,也就是「同时满足」。这套能力适合定位问题:知道大概是谁、什么时候、信息里大概写了什么,就能把候选范围从上万条缩到几条。
几种常用条件
--author 匹配作者名或邮箱,可以写正则;--grep 匹配整条提交信息,加 -i 忽略大小写;--since 与 --until 限定时间范围,支持相对时间写法;--no-merges 过滤掉合并提交。多个 --grep 之间默认是或关系,需要全部命中时必须显式加 --all-match。
基本信息
| 适用平台 | Linux / macOS / Windows(Git 2.x) |
|---|---|
| 作者条件 | --author=<正则> |
| 信息条件 | --grep=<正则>,多个之间默认或关系 |
| 时间条件 | --since / --until,支持相对时间 |
| 大小写 | 默认区分大小写,加 -i 忽略 |
| 组合限制 | 多个 --grep 要全部命中需加 --all-match |
典型使用场景
- 定位问题:按大概的作者与时间缩小嫌疑范围
- 汇总变更:按关键词找出某类改动,整理成清单
- 复盘节奏:用 --since 查看最近两周的提交情况
- 过滤噪声:加 --no-merges 只看真实改动
- 脚本统计:配合 --format 输出固定字段做汇总
常用示例
常用示例
git log --author='Li Wei' --oneline # 某个作者的提交
git log --grep='timeout' --all-match -i # 信息含关键词
git log --since='2 weeks ago' --oneline # 最近两周
git log --grep='fix' --grep='login' --all-match # 同时含两个关键词
git log --no-merges --since='2026-01-01' --until='2026-06-30'
git log --author='liwei.*' --oneline -20 # 用正则覆盖多个邮箱常用筛选条件
| 条件 | 匹配对象 | 注意 |
|---|---|---|
| --author | 作者名与邮箱 | 支持正则,可覆盖多邮箱 |
| --grep | 整条提交信息 | 默认区分大小写 |
| -i | 忽略大小写 | 与 --grep 搭配最常用 |
| --since / --until | 提交时间 | 支持相对时间写法 |
| --all-match | 多个条件的组合方式 | 缺省是或关系 |
--grep 匹配的是整条提交信息,包括主题行与正文;默认区分大小写,加 -i 可以忽略大小写,避免漏掉写法不一致的记录。
同一人使用多个邮箱时,按单一值精确匹配会漏掉一部分。改用正则如 --author='liwei.*' 能一次覆盖多种写法,排查改动来源时更省事。
多个筛选条件可以叠加使用,例如同时限定作者与时间窗、再加一个关键词;条件越多范围越准,但也更容易因为写法不一致而漏掉记录,必要时先用宽松条件看清全貌。