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>