Git 提交历史记录

1、查看旧提交
在参数形式上,git log 和 git log HEAD 是同样的,输出每个能够从 HEAD 找到的历史记录中的提交日志消息。注意当回溯历史记录的时候,Git 是依附于提交图的,而不是时间。git

限制历史记录的一种技术是使用 since..until 这样的形式来指定提交的范围。给定一个范围,git log 将会把在 since 到 until 之间的全部提交显示出来。下面给出一个例子。web

$ git log --pretty=short --abbrev-commit master~5..master~3
commit eac5baa
Author: Jon Loeliger <jdl@spcial-project.example.org>

moved data to mydata

commit 01f0226
Author: Jon Loeliger <jdl@spcial-project.example.org>

moved data to newdata

这里 git log 显示了在 master~5 到 master~3 之间的全部提交,就是主分支上以前第4次和第5次提交。
前面例子引入的格式 –pretty=short 调整了每一个提交的信息数量,而且还有其余几个选项,包括 online、short 和 full。–abbrev-commit 只是简单的请求缩写散列ID。svg

使用 -p 选项来输出提交引进的补丁或变动。工具

$ git log -1 -p eac5baa
commit eac5baa1040a823a19d62c485566d692595bd1e5
Author: Jon Loeliger <jdl@spcial-project.example.org>
Date:   Sat Aug 5 10:30:20 2017 +0800

moved data to mydata

diff --git a/mydata b/mydata
new file mode 100644
index 0000000..a3c9c79
--- /dev/null
+++ b/mydata
@@ -0,0 +1,2 @@
+new data
+and some more data now
\ No newline at end of file

-1也是一个不错的选择,它会输出限制为一个提交。也可使用 -n 来将输出限制为最多 n 个提交。3d

–stat 选项列举了提交中所更改的文件以及每一个提交的文件中有多少行作了改动。日志

$ git log --pretty=short --stat master~3..master~1
commit e818fb29279add451d130af367ee2e58e8851ca9
Author: Jon Loeliger <jdl@spcial-project.example.org>

add hello.txt

 hello.txt | 1 +
 1 file changed, 1 insertion(+)

commit 726f3d32595255e243925ed1177fb621122a3508
Author: Jon Loeliger <jdl@spcial-project.example.org>

delete newdata

 newdata | 2 --
 1 file changed, 2 deletions(-)

另外一个查看对象库中的对象信息的命令是 git show。可使用它来查看某个提交。code

$ git show HEAD~2

或者查看某个特定的 blob 对象信息。xml

$ git show origin/master:Makefile

显示的是 origin/master 分支的 Makefile blob。对象

2、提价图
Git 使用的一种——有向无环图(DAG)。
一些工具,如 gitk 和 git show-branch 能够将提交历史记录形象地表现出来。在使用这些工具时,时间抽一般是自下向上。blog

使用 gitk 来查看提交图

$ cd new
$ gitk

gitk截图

3、提交范围
许多 Git 命令都容许指定提交范围。
双句点(..)形式就表示一个范围。一般状况下,提交范围用来检查某个分支或分支的一部分。
当使用 git log 命令并指定 Y 提交时,其实是要求 Git 给出 Y 提交可达的全部提交的日志。能够经过表达式 ^X 排除可达交集中的提交 X。
结合这两种形式,git log ^X Y 就等同于 git log X..Y。从数学上来说,也能够认为它是集合减法:用 Y 以前的全部提交减去 X 之间的全部提交且包括 X。

加入分支和合并后,范围 topic..master 表示在 master 分支而不在 topic 分支的提交。
还有其余两种范围表示方法,若是省略 start 或者 end,就默认用 HEAD 代替。所以, ..end 等价于 HEAD..endstart.. 等价于 start..HEAD。

只有形如 start ..end 的范围才表示集合的减法运算,而 A…B (三个句点)表示 A 和 B 之间的对称差,也就是 A 或 B 可达 但又不是 A 和 B 同时可达的提交集合。