Git中文社区

查看提交历史

在提交了若干更新,或者克隆了某个项目之后,你也许想回顾一下提交历史。Git 提供了强大的工具来完成这件事。

git log

不带参数时,git log 会按时间倒序列出所有提交:

git log
# commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> main)
# Author: 张三 <[email protected]>
# Date:   Mon Mar 17 21:52:11 2025 +0800
#
#     修改版本号

按 q 退出,按空格翻页,按 / 搜索。

常用选项

# 每个提交只显示一行
git log --oneline

# 以图形方式显示分支合并历史
git log --oneline --graph --all

# 显示每次提交的修改内容
git log -p

# 只显示最近 3 次提交
git log -3

# 显示每次提交修改了哪些文件及行数统计
git log --stat

过滤提交

# 按作者
git log --author="张三"

# 按提交说明关键字
git log --grep="登录"

# 按时间范围
git log --since="2025-01-01" --until="2025-03-01"
git log --since="2 weeks ago"

# 只看某个文件的历史
git log -- src/app.js

# 查找添加或删除了某段代码的提交
git log -S "getUserInfo"

# 不显示合并提交
git log --no-merges

自定义输出格式

git log --pretty=format:"%h %an %ar : %s"
# ca82a6d 张三 6 天前 : 修改版本号

常用占位符:

占位符含义
%H / %h完整 / 简短提交哈希
%an / %ae作者名字 / 邮箱
%ad / %ar作者日期 / 相对日期
%s提交说明第一行
%d分支、标签等引用名

查看分支之间的差异提交

# 在 feature 中但不在 main 中的提交
git log main..feature

# 两个分支各自独有的提交
git log main...feature --left-right

git show

查看某个提交的详细信息和修改内容:

# 查看最新提交
git show

# 查看指定提交
git show a1b2c3d

# 查看某个提交中某个文件的内容
git show a1b2c3d:src/app.js

引用提交的方式

除了哈希值,还可以用相对引用:

git show HEAD      # 当前提交
git show HEAD~1    # 上一个提交
git show HEAD~3    # 往前第 3 个提交
git show HEAD^2    # 合并提交的第二个父提交
git show main@{yesterday}  # main 分支昨天的状态

git blame

想知道某一行代码是谁、在什么时候写的?用 git blame:

git blame src/app.js

# 只看第 10 到 20 行
git blame -L 10,20 src/app.js

提示

用 blame 找到提交后,再 git show 看看那次提交的说明和完整改动,通常就能知道这行代码当初为什么这么写。

git shortlog

按作者汇总提交,常用于生成发布说明:

git shortlog -sn
#   120  张三
#    85  李四