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

相关推荐
赵民勇3 小时前
Git命令详解
git
不老刘21 小时前
Antigravity 的 New Worktree 模式:给 AI 代理一个安全的“平行工位”
人工智能·git·ai编程·antigravity
光谱SpectrAI1 天前
Windows 也中招:Git Bash 和 Node 仍信任泄露的 eMudhra 证书
git
YIN_尹1 天前
【git原理与使用】git初识与安装
大数据·git·elasticsearch
Leo_Mr1 天前
Vue3 项目配置 Git 提交规范(企业通用方案:husky + commitlint + cz-git + lint-staged)
git
jyOverQ1 天前
Git rebase 和 merge 有什么区别?什么时候该用哪个?
git
晗夜未央1 天前
跨仓库 Skill 换台电脑就失效?用 Git remote 校验项目
人工智能·git·python
Lsetea1 天前
Git访问HTTPS证书不受信任:用URL级sslCAInfo限定私有CA范围
git·https·开发工具·ssl证书·ca证书
এ慕ོ冬℘゜2 天前
Git 基础入门|和 SVN 对比 + 四大区域 + 常用命令详解
git·svn
DevLoom_2 天前
macOS 命令行 curl/git 报 SSL 证书错误?eMudhra 事件完整修复指南
git·macos·ssl