git log

文章目录

  • [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 log vs git 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 简化日常使用。


参考文献

Git - git-log Documentation

相关推荐
阿明63 小时前
Git的原理与使用
git
阿旭超级学得完3 小时前
Linux基础指令 四(apt,vim,git,cgdb)
linux·服务器·开发语言·数据结构·c++·git·vim
恋喵大鲤鱼16 小时前
git mv
git·git mv
Patrick_Wilson19 小时前
Git Worktree 原理详解:从 objects / refs 看懂多分支并行与多 Agent 协作
git·面试·ai编程
yaoxiaoganggang20 小时前
克隆 Superpowers 的规则库到你的本地(或者直接作为 Git Submodule)
人工智能·经验分享·git·ai编程
Python私教1 天前
用 Claude Code 做大型重构不翻车:分批+Git 兜底+验证闭环的实战流程(2026)
git·重构·ai编程·代码重构·工程实践·claude code
Shawn Dev1 天前
团队协作中的 Git Tag 最佳实践:从入门到精通
大数据·git·elasticsearch
独隅1 天前
Git/GitHub/GitLab/Gitee 核心对比指南
git·gitlab·github
佛山个人技术开发1 天前
GitCode个人技术开发者总结完整使用指南
windows·git·svn·github·gitcode