10. 查看历史

目标

  • 学习如何查看项目的历史。

获得已经做过的修改列表是 git log 命令的功能。

$ git log

你可以看到:

$ git log
commit 4d578d47c426d4d94fcb3c645fe29c27138f3900
Author: Jim Weirich <jim (at) edgecase.com>
Date:   Fri Nov 1 10:47:28 2019 -0700

    Added a comment

commit dc1d42fa6deb8a5c0abc8694b9f48604ce70d998
Author: Jim Weirich <jim (at) edgecase.com>
Date:   Fri Nov 1 10:47:28 2019 -0700

    Added a default value

commit 9a1c494d033bf09a20ac0b10c32048e89ec5fe3b
Author: Jim Weirich <jim (at) edgecase.com>
Date:   Fri Nov 1 10:47:28 2019 -0700

    Using ARGV

commit 063b40ead4efa2dce10ca893772c83483f0b546b
Author: Jim Weirich <jim (at) edgecase.com>
Date:   Fri Nov 1 10:47:28 2019 -0700

    First Commit

这份列表是迄今为止我们对仓库所作的所有四次提交。

单行历史

你可以很好的控制处理 log 命令要精确显示的内容。我喜欢单行格式:

$ git log --pretty=oneline

你可以看到:

$ git log --pretty=oneline
4d578d47c426d4d94fcb3c645fe29c27138f3900 Added a comment
dc1d42fa6deb8a5c0abc8694b9f48604ce70d998 Added a default value
9a1c494d033bf09a20ac0b10c32048e89ec5fe3b Using ARGV
063b40ead4efa2dce10ca893772c83483f0b546b First Commit

控制显示哪个条目

log 命令有许多选项用来选择显示哪些条目。尝试下面的选项:

$ git log --pretty=oneline --max-count=2
$ git log --pretty=oneline --since='5 minutes ago'
$ git log --pretty=oneline --until='5 minutes ago'
$ git log --pretty=oneline --author=<your name>
$ git log --pretty=oneline --all

参阅 man git-log 了解更多细节。

更加漂亮

这是我用来复查上周所做更改的命令。如果我只想看自己所作的更改,那么我将添加 --author=jim

$ git log --all --pretty=format:'%h %cd %s (%an)' --since='7 days ago'

终极日志格式

随着时间的推移,我发现在工作时最喜欢下列日志格式。

$ git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short'

它看起来像这样:

$ git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
* 4d578d4 2019-11-01 | Added a comment (HEAD -> master) [Jim Weirich]
* dc1d42f 2019-11-01 | Added a default value [Jim Weirich]
* 9a1c494 2019-11-01 | Using ARGV [Jim Weirich]
* 063b40e 2019-11-01 | First Commit [Jim Weirich]

让我们看一下细节:

  • --pretty="..." 定义输出的格式

  • %h 是提交 hash 的缩写

  • %d 是提交的装饰(如分支头或标签)

  • %ad 是提交日期

  • %s 是注释

  • %an 是作者姓名

  • --graph 使用 ASCII 图形布局显示提交树

  • --date=short 使日期格式显示更好且更短

其它工具

gitx (Mac) 和 gitk (任意平台) 在浏览日志历史时十分有用。