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

相关推荐
demon755200326 分钟前
Git Worktree详解介绍
git·worktree
胖大和尚2 小时前
当前仓库推送到同一台机器上的另一个文件夹
git
轮到我狗叫了1 天前
git - 版本控制工具 - 对应的常见命令 - 以及无需后续每次手动source conda
git
changxiang1 天前
GIT 备忘
git
DogDaoDao2 天前
Windows 开发提效工具全景指南:60+ 工具的工程化分层配置
windows·git·程序员·开发工具·powershell·everything·msys2
wdfk_prog2 天前
GitHub push 失败:如何扫描并清理 Git 历史中的大文件
git·elasticsearch·github
大明二代2 天前
使用 Traefik、cert-manager 和 DNS-01 为内网 Kubernetes 服务配置 HTTPS
git·kubernetes·flux
小芒果_012 天前
git常用命令速查
大数据·git·elasticsearch
2501_930472442 天前
腾讯云助手规范化Git提交记录
git·elasticsearch·腾讯云
风尘小子3 天前
git的.gitignore文件中文件和目录配置
git