11.4.3 浏览日志:git log

命令git log是老朋友了,在前面的章节中曾经大量地出现,用于显示提交历史。

1.显示的日志范围

命令git log的后面可以接表示版本范围的参数,当不使用任何表示版本范围的参数时,相当于使用了默认的参数HEAD,即显示当前HEAD能够访问到的所有历史提交。下面的示例使用了前面介绍的版本范围表示法:


$git log—oneline F^!D

beb30ca Commit F:merge I with J

212efce Commit D:merge G with H

2ab52ad commit H.

e80aa74 commit G.


2.分支图显示

通过—graph参数调用git log可以显示字符界面的提交关系图,而且不同的分支还可以用不同的颜色来表示。如果希望每次查看日志的时候都看到提交关系图,可以设置一个别名,用别名来调用。


$git config—global alias.glog "log—graph"


定义别名之后,每次希望自动显示提交关系图,就可以使用别名命令:


$git glog—oneline

*6652a0d Add Images for git treeview.

*8199323 Commit A:merge B with C.

|\

|*0cd7f2e commit C.

||

|\

*-.\776c5c9 Commit B:merge D with E and F

|\\

|||/

||*beb30ca Commit F:merge I with J

|||\

|||*3252fcc commit J.

||*634836c commit I.

|*83be369 commit E.

*212efce Commit D:merge G with H

|\

|*2ab52ad commit H.

*e80aa74 commit G.


3.显示最近的几条日志

可以使用参数-<n>(<n>为数字),显示最近的<n>条日志。例如下面的命令显示最近的3条日志。


$git log-3—pretty=oneline

6652a0dce6a5067732c00ef0a220810a7230655e Add Images for git treeview.

81993234fc12a325d303eccea20f6fd629412712 Commit A:merge B with C.

0cd7f2ea245d90d414e502467ac749f36aa32cc4 commit C.


4.显示每次提交的具体改动

使用参数-p可以在显示日志的时候同时显示改动。


$git log-p-1

commit 6652a0dce6a5067732c00ef0a220810a7230655e

Author:Jiang Xin<jiangxin@ossxp.com>

Date:Thu Dec 9 16:07:11 2010+0800

Add Images for git treeview.

Signed-off-by:Jiang Xin<jiangxin@ossxp.com>

diff—git a/gitg.png b/gitg.png

new file mode 100644

index 0000000..fc58966

Binary files/dev/null and b/gitg.png differ

diff—git a/treeview.png b/treeview.png

new file mode 100644

index 0000000..a756d12

Binary files/dev/null and b/treeview.png differ


因为是二进制文件改动,默认不显示改动的内容。实际上Git的差异文件提供对二进制文件的支持,本书第7篇第38章将予以专题介绍。

5.显示每次提交的变更概要

使用-p参数会让日志输出显得非常冗余,当不需要知道具体的改动而只想知道改动在哪些文件上时,可以使用—stat参数。输出的变更概要像极了GNU的diffstat命令的输出。


$git log—stat—oneline I..C

0cd7f2e commit C.

README|1+

doc/C.txt|1+

2 files changed,2 insertions(+),0 deletions(-)

beb30ca Commit F:merge I with J

3252fcc commit J.

README|7+++++++

doc/J.txt|1+

src/.gitignore|3+++

src/Makefile|27+++++++++++++++++++++++++++

src/main.c|10++++++++++

src/version.h.in|6++++++

6 files changed,54 insertions(+),0 deletions(-)


6.定制输出

Git的日志输出命令提供了很多输出模板选择,可以根据需要选择冗余显示或精简显示。

参数—pretty=raw显示commit的原始数据,可以显示提交对应的树ID。


$git log—pretty=raw-1

commit 6652a0dce6a5067732c00ef0a220810a7230655e

tree e33be9e8e7ca5f887c7d5601054f2f510e6744b8

parent 81993234fc12a325d303eccea20f6fd629412712

author Jiang Xin<jiangxin@ossxp.com>1291882031+0800

committer Jiang Xin<jiangxin@ossxp.com>1291882892+0800

Add Images for git treeview.

Signed-off-by:Jiang Xin<jiangxin@ossxp.com>


参数—pretty=fuller会同时显示作者和提交者,两者可以不同。


$git log—pretty=fuller-1

commit 6652a0dce6a5067732c00ef0a220810a7230655e

Author:Jiang Xin<jiangxin@ossxp.com>

AuthorDate:Thu Dec 9 16:07:11 2010+0800

Commit:Jiang Xin<jiangxin@ossxp.com>

CommitDate:Thu Dec 9 16:21:32 2010+0800

Add Images for git treeview.

Signed-off-by:Jiang Xin<jiangxin@ossxp.com>


参数—pretty=oneline显然会提供最精简的日志输出。也可以使用—oneline参数,效果近似。


$git log—pretty=oneline-1

6652a0dce6a5067732c00ef0a220810a7230655e Add Images for git treeview.


如果只想查看和分析某一个提交,也可以使用git show或git cat-file命令。使用git show显示里程碑D及其提交:


$git show D—stat

tag D

Tagger:Jiang Xin<jiangxin@ossxp.com>

Date:Thu Dec 9 14:24:52 2010+0800

create node D

commit 212efce1548795a1edb08e3708a50989fcd73cce

Merge:e80aa74 2ab52ad

Author:Jiang Xin<jiangxin@ossxp.com>

Date:Thu Dec 9 14:06:34 2010+0800

Commit D:merge G with H

Signed-off-by:Jiang Xin<jiangxin@ossxp.com>

README|2++

doc/D.txt|1+

doc/H.txt|1+

3 files changed,4 insertions(+),0 deletions(-)


使用git cat-file显示里程碑D及其提交。参数-p的含义是美观的输出(pretty)。


$git cat-file-p D^0

tree 1c22e90c6bf150ee1cde6cefb476abbb921f491f

parent e80aa7481beda65ae00e35afc4bc4b171f9b0ebf

parent 2ab52ad2a30570109e71b56fa1780f0442059b3c

author Jiang Xin<jiangxin@ossxp.com>1291874794+0800

committer Jiang Xin<jiangxin@ossxp.com>1291875877+0800

Commit D:merge G with H

Signed-off-by:Jiang Xin<jiangxin@ossxp.com>