文章目录
- [1. 简介](#1. 简介)
- [2. 格式](#2. 格式)
- [3. 选项](#3. 选项)
-
- [3.1 输出格式](#3.1 输出格式)
- [3.2 数量限制](#3.2 数量限制)
- [3.3 范围与路径](#3.3 范围与路径)
- [4. 示例](#4. 示例)
-
- [4.1 基本用法](#4.1 基本用法)
- [4.2 限制数量](#4.2 限制数量)
- [4.3 按作者/信息筛选](#4.3 按作者/信息筛选)
- [4.4 查看文件历史](#4.4 查看文件历史)
- [4.5 查看分支差异](#4.5 查看分支差异)
- [4.6 自定义输出格式](#4.6 自定义输出格式)
- [5. 注意](#5. 注意)
-
- [5.1 常用别名](#5.1 常用别名)
- [5.2 `git log` vs `git reflog`](#5.2
git logvsgit reflog) - [5.3 查看代码统计](#5.3 查看代码统计)
- [5.4 完整占位符列表](#5.4 完整占位符列表)
- [6. 小结](#6. 小结)
- 参考文献
1. 简介
git log 用于查看提交历史。它显示提交哈希、作者、日期和提交信息,是了解项目演进历史的核心命令。
典型场景:
- 查看项目的提交记录
- 搜索特定提交
- 查看某个文件的修改历史
- 统计代码贡献
如果记录过多,则按 Page Up、Page Down、↓、↑ 键来控制显示,按 q 退出历史记录列表。
2. 格式
bash
git log [<options>] [<revision-range>] [[--] <path>...]
注意,<path> 用于限定指定路径(文件或目录)相关文件的提交历史,不指定缺省为当前目录(及所有子目录)下的所有文件。
3. 选项
3.1 输出格式
bash
--merges
只展示 merge 信息
--no-merges
不展示 merge 信息
--abbrev-commit
精简 commit id,只展示 40 个十六进制数字构成的 commit id 的首部(默认7位)
--graph
以文本字符绘制的"图形"展示
--pretty[=<format>]
自定义输出格式(如 `%h - %s (%an)`)。如果没有参数,则缺省为 oneline
--format=<format>
以指定格式展示,<format> 可取值 oneline, short, medium, full, fuller, email, raw, format:<string> 和 tformat:<string>,其中<string>为格式控制字符串。缺省值为 medium。常用的是 oneline
--oneline
一行显示(简洁模式)。等价于 --pretty=oneline --abbrev-commit
--grep=<pattern>
根据提交消息的内容来过滤和查找提交历史。
--stat[=<width>[,<name-width>[,<count>]]]
显示文件变更统计(增删行数)
-p, --patch
显示每次提交的具体变更内容
--relative-date
显示相对时间(如 `2 days ago`)。等价于 --date=relative
3.2 数量限制
bash
-, -n, --max-count=<number>
限制显示最近的 n 条提交(如 `-5`)
--since=<date>, --after=<date>
显示指定日期之后的提交
--until=<date>, --before=<date>
显示指定日期之前的提交
--author=<pattern>, --committer=<pattern>
只显示指定提交者的提交
--grep=<pattern>
只显示提交信息匹配的提交
3.3 范围与路径
bash
-- <path>
只显示指定文件或目录的提交历史
<commit1>..<commit2>
显示两个提交之间的提交(不包含 commit1)
<branch1>..<branch2>
显示在 branch2 但不在 branch1 中的提交
--all
显示所有引用(所有分支、远程跟踪分支、标签)的提交历史。
4. 示例
4.1 基本用法
bash
# 完整提交历史
git log
# 一行显示(最常用)
git log --oneline
# 图形化显示分支结构
git log --graph --oneline
4.2 限制数量
bash
# 最近 5 条提交
git log -5 --oneline
# 最近 2 周的提交
git log --since="2 weeks ago"
# 指定日期范围
git log --after="2024-01-01" --before="2024-03-01"
4.3 按作者/信息筛选
bash
# 查看张三的提交
git log --author="张三"
# 搜索提交信息中包含 "bug" 的提交
git log --grep="bug"
4.4 查看文件历史
bash
# 查看 main.go 的提交历史
git log --oneline main.go
# 查看 main.go 每次提交的具体变更
git log -p main.go
4.5 查看分支差异
bash
# 在 feature 但不在 main 中的提交
git log main..feature --oneline
4.6 自定义输出格式
bash
# 自定义格式:哈希 - 信息 (作者)
git log --pretty=format:"%h - %s (%an)"
# 常用格式化占位符
# %h : 短哈希
# %s : 提交信息
# %an : 作者名
# %ae : 作者邮箱
# %ad : 作者日期
5. 注意
5.1 常用别名
bash
# 常用别名配置
git config --global alias.lg "log --oneline --graph --all"
git config --global alias.hist "log --pretty=format:'%C(yellow)%h %C(blue)%ad %C(white)%s %C(red)%d' --date=short"
# 使用别名
git lg
git hist
5.2 git log vs git reflog
| 命令 | 内容 | 说明 |
|---|---|---|
git log |
提交历史 | 仓库的提交记录(可被同步) |
git reflog |
引用日志 | 本地 HEAD 的移动记录(不可同步) |
git reflog 常用于找回丢失的提交。
5.3 查看代码统计
bash
# 查看每次提交的增删行数
git log --stat
# 统计每个人的代码贡献
git shortlog -sn
5.4 完整占位符列表
| 占位符 | 含义 | 示例 |
|---|---|---|
%H |
完整提交哈希 | a1b2c3d4e5f6... |
%h |
短提交哈希 | a1b2c3d |
%T |
完整树哈希 | t1b2c3d... |
%t |
短树哈希 | t1b2c3d |
%P |
完整父提交哈希 | p1b2c3d... |
%p |
短父提交哈希 | p1b2c3d |
%an |
作者名 | 张三 |
%ae |
作者邮箱 | zhangsan@example.com |
%ad |
作者日期(按 --date 格式) |
2024-06-09 10:30:00 +0800 |
%ar |
作者日期(相对格式) | 2 days ago |
%at |
作者日期(Unix 时间戳) | 1717900200 |
%cn |
提交者名 | 李四 |
%ce |
提交者邮箱 | lisi@example.com |
%cd |
提交者日期 | 2024-06-09 11:00:00 +0800 |
%cr |
提交者日期(相对格式) | 1 hour ago |
%ct |
提交者日期(Unix 时间戳) | 1717903800 |
%s |
提交信息标题 | 修复登录验证 bug |
%b |
提交信息正文 | 详细描述 |
%B |
提交信息(标题 + 正文) | 完整信息 |
%d |
引用名称(分支、标签) | (HEAD -> main, origin/main) |
%D |
引用名称(不带括号) | HEAD -> main, origin/main |
%e |
编码方式 | UTF-8 |
%N |
提交注释 | (通常为空) |
%GG |
GPG 签名原始信息 | |
%G? |
GPG 签名状态 | G(好)、B(坏)、U(未知)等 |
%GS |
GPG 签名者 | 张三 <zhangsan@example.com> |
%GK |
GPG 密钥 ID | A1B2C3D4 |
6. 小结
| 需求 | 命令 | 说明 |
|---|---|---|
| 简洁历史 | git log --oneline |
最常用,一行一个提交 |
| 图形化分支 | git log --graph --oneline --all |
查看分支结构 |
| 最近 N 条 | git log -5 --oneline |
限制数量 |
| 文件历史 | git log --oneline main.go |
查看文件修改记录 |
| 搜索提交信息 | git log --grep="bug" |
查找特定提交 |
| 查看作者提交 | git log --author="张三" |
按作者筛选 |
| 查看分支差异 | git log main..feature |
分支间差异 |
一句话总结 :git log 是查看提交历史的核心命令。--oneline 最常用;--graph 可视化分支;--author 和 --grep 可按条件筛选。推荐配置别名 git lg 简化日常使用。