前一节:【Git 学习二】Git 文件操作 - 文件添加、移除与重命名:


【Git 学习三】Git 查看提交历史,格式化输出统计信息


文章目录

  • 【Git 学习三】Git 查看提交历史,格式化输出统计信息
  • 1. 基础命令
  • 2. 统计信息
  • 2.1 - 简略统计信息
  • 2.2 - 格式化统计信息
  • 2.3 - 过滤输出
  • 2.4 - 其他的选项


1. 基础命令

用于查看提交历史记录/提交日志的命令为

git log

在 git bash 输入此命令后, 会以时间逆序(最近的时间在前)列出各个提交历史,这些提交历史内容包括:

  • 提交的 SHA-1 校验和,
  • 作者名称,电子邮箱地址
  • 提交日期
  • 提交说明

大致如下:

$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit

2. 统计信息

2.1 - 简略统计信息

简略修改统计信息

git log 命令后添加 --stat 选项,会显示哪些文件被修改,以及被修改的文件有多少行的移除 (deletions),多少行添加 (insertions)。

$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

 Rakefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test

 lib/simplegit.rb | 5 -----
 1 file changed, 5 deletions(-)

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit

 README           |  6 ++++++
 Rakefile         | 23 +++++++++++++++++++++++
 lib/simplegit.rb | 25 +++++++++++++++++++++++++
 3 files changed, 54 insertions(+)

单行历史信息

git log 命令加上 --oneline 选项,可以一行显示简略日志信息。

$ git log --oneline
ca82a6dff changed the version number
085bb3bcb removed unnecessary test
a11bef06a first commit

此命令相当于 --pretty=oneline--abbrev-commit 合用, --pretty 稍后介绍。

2.2 - 格式化统计信息

git log--pretty 选项可以使用自定义的格式展示提交历史记录,有一些内建子选项供选择
short , full , fuller , onelineformat

用法:

git log --pretty=<option>

举例:

git log --pretty=oneline

git log --pretty=onelinegit log --oneline 不同的地方为,前者显示完整的 SHA-1 哈希值校验和

format 用于自定义显示格式

$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit

%h 表示简写哈希值,%an 表示作者名称,%ar 表示提交历史的相对时间,%s 表示提交说明

–pretty=format 常用标识

选项

说明

速记

%H

提交的完整哈希值

commit hash

%h

提交的简写哈希值

-

%T

树的完整哈希值

tree hash

%t

树的简写哈希值

-

%P

父提交的完整哈希值

-

%p

父提交的简写哈希值

-

%an

作者名字

author name

%ae

作者的电子邮件地址

author email

%ad

作者修订日期

author date

%ar

作者修订日期,按多久以前的方式显示

author date, relative

%cn

提交者的名字

committer name

%ce

提交者的电子邮件地址

committer email

%cd

提交日期

committer date

%cr

提交日期,按多久以前的方式显示

committer date, relative

%s

提交说明

subject

作者 是实际的修改人,而 提交者 是将此工作合并到分支的人,如代码监视人/责任人,Git 的维护人员等。


2.3 - 过滤输出

如需要在源码中查看 Junio C Hamano 在 2008 年10 月期间除了合并提交之外的哪些提交 修改了 t/ 路径下的文件,可以使用:

$ git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" \
   --before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attributes are in use
acd3b9e - Enhance hold_lock_file_for_{update,append}() API
f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
51a94af - Fix "checkout --track -b newbranch" on detached HEAD
b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch

其他过滤输出选项

选项

说明

-<n>

仅显示最近的 n 条提交, n 在使用时用具体数字代替

--since , --after

仅显示指定时间之后的提交

--until , --before

仅显示指定时间之前的提交

--author

仅显示作者匹配指定字符串的提交

--committer

仅显示提交者匹配指定字符串的提交

--grep

仅显示提交说明中包含指定字符串的提交

-S

仅显示添加或删除内容匹配指定字符串的提交


其他使用举例

仅显示最近两条提交历史

git log -2

仅显示最近两周的提交历史

git log --since=2.weeks

仅显示 path/src/ 目录下的提交历史

git log -- path/src/

2.4 - 其他的选项

选项

说明

速记

-p

按补丁格式显示每个提交引入的差异

patch

--stat

显示每次提交的文件修改统计信息

statistics

--shortstat

只显示 --stat 中最后的行数修改添加移除统计

-

--name-only

仅在提交信息后显示已修改的文件清单

-

--name-status

显示新增、修改、删除的文件清单

-

--abbrev-commit

仅显示 SHA-1 校验和所有 40 个字符中的前几个字符

abbreviated

--relative-date

使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”

-

--graph

在日志旁以 ASCII 图形显示分支与合并历史

-

--pretty

使用其他格式显示历史提交信息。可用的选项包括 onelineshortfullfullerformat

-

--oneline

--pretty=oneline--abbrev-commit 合用的简写

-

参考链接:

Git 官方中文操作文档 - https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2