可以查看自己项目的提交历史,克隆下来的项目也包含完整的提交历史。

按时间顺序排列,最近日期的在前,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。

Git log 常用选项

—patch -p

若要想查看每条提交记录所对应的修改内容,则可以使用 git log --patchgit log -p,会调用默认分页器 less 来查看每条记录对应的修改内容(通常是 git diff 形式显示):

再加上一个 -<counts> 参数可以单独显示前几次提交,如 git log -p -2 显示前两个。

—stat

你也可以为 git log 附带一系列的总结性选项。 比如你想看到每次提交的简略统计信息,可以使用 --stat 选项: 红框的内容是与默认 git log 相比多出的内容,包含所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结。

—since/—until, —author等筛选

按时间筛选:--since=2.weeks 两周内的所有提交,该命令可用的格式十分丰富——可以是类似 "2008-01-15" 的具体的某一天,也可以是类似 "2 years 1 day 3 minutes ago" 的相对日期。

按修改内容筛选,即找出修改了某段代码内容的提交:-S <string> 俗称“pickaxe”选项,取“用鹤嘴锄在土里捡石头”之意), 它接受一个字符串参数,并且只会显示那些添加或删除了该字符串的提交。

最后一个很实用的 git log 选项是路径(path), 如果只关心某些文件或者目录的历史提交,可以在 git log 选项的最后指定它们的路径。 因为是放在最后位置上的选项,所以用两个短划线(—)隔开之前的选项和后面限定的路径名。

选项说明
-<n>仅显示最近的 n 条提交。
--since, --after仅显示指定时间之后的提交。
--until, --before仅显示指定时间之前的提交。
--author仅显示作者匹配指定字符串的提交。
--committer仅显示提交者匹配指定字符串的提交。
--grep仅显示提交说明中包含指定字符串的提交。
-S仅显示添加或删除内容匹配指定字符串的提交。

—pretty

这个选项可以使用不同于默认格式的方式展示提交历史。

这个选项有一些内建的子选项供你使用:

  • oneline 会将每个提交放在一行显示,包括SHA-1校验和与提交信息,在浏览大量的提交时非常有用
  • shortfullfuller 选项,它们展示信息的格式基本一致,但是详尽程度不一

format 子选项可以自定义输出格式,适用于后期提取分析,因为你知道输出的格式不会随着git 的更新而发生改变,如 git log --pretty=format:"%h - %an, %ar:%s" 的结果为:

有以下常用选项:(更多查看Redirecting…

选项说明
%H提交的完整哈希值
%h提交的简写哈希值
%T树的完整哈希值
%t树的简写哈希值
%P父提交的完整哈希值
%p父提交的简写哈希值
%an作者名字
%ae作者的电子邮件地址
%ad作者修订日期(可以用 —date=选项 来定制格式)
%ar作者修订日期,按多久以前的方式显示
%cn提交者的名字
%ce提交者的电子邮件地址
%cd提交日期
%cr提交日期(距今多长时间)
%s提交说明

—decorate 查看分支所指对象

你可以简单地使用 git log 命令查看各个分支当前所指的对象。 提供这一功能的参数是 --decorate

$ git log --oneline --decorate
f30ab (HEAD -> master, testing) add feature #32 - ability to add new formats to the central interface
34ac2 Fixed bug #1328 - stack overflow under certain conditions
98ca9 The initial commit of my project

正如你所见,当前 mastertesting 分支均指向校验和以 f30ab 开头的提交对象。

—graph —all 可以进一步查看所有分支的情况

运行 git log --oneline --decorate --graph --all ,它会输出你的提交历史、各个分支的指向以及项目的分支分叉情况。

$ git log --oneline --decorate --graph --all
* c2b9e (HEAD, master) made other changes
| * 87ab2 (testing) made a change
|/
* f30ab add feature #32 - ability to add new formats to the
* 34ac2 fixed bug #1328 - stack overflow under certain conditions
* 98ca9 initial commit of my project