Git 提交历史记录

xiaoxiao2021-02-28  70

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

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

$ 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。

使用 -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 个提交。

–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。可以使用它来查看某个提交。

$ git show HEAD~2

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

$ git show origin/master:Makefile

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

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

使用 gitk 来查看提交图

$ cd new $ gitk

三、提交范围 许多 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..end,start.. 等价于 start..HEAD。

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

转载请注明原文地址: https://www.6miu.com/read-43598.html

最新回复(0)