@[TOC]
一、引言
在本系列的第一篇文章Git 系列 1:提交修改到远程仓库——详尽版的【八、查看提交记录】中,我们提到了关于查看日志的知识,今天,我们再来详细的了解以下日志查看的相关命令。
二、查看日志
2.1 查看所有记录
2.1.1 显示所有提交过的版本信息
通过 git log 命令可以查看至今为止的所有的提交记录。
git log
运行结果如下:
可以看到,界面中显示了不少的commit 记录。以第一条记录为例,每个commit 记录都包含了sha-1 值,作者(Author ),修改日期(Date ),提交信息(add C )等信息。
输入此命令时,命令行界面只列举了最近的几次提交,而并不会一次性将所有的commit 记录都列举出来。
操作方法:
- 若你打算查看更之前的记录,只需要按下方向键【 ↓ 】或者字母键【 J 】,命令行界面就会向下移动一行。
- 若你已经将日志移动到较后的位置,想查看最近的commit 记录,只需要按下方向键【 ↑ 】或者字母键【 K 】,命令行界面就会向上移动一行。
- 若你想关闭日志查看,只需要按下字母键【 q 】,就可以退出日志界面。
2.1.2 查看所有分支的所有操作记录
通过命令 git reflog 可以查看项目中所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)。
git reflog
运行结果如下:
可以看到,界面中显示了不少操作记录。以第一条记录为例,每条记录都包含了sha-1 值,标识( (newB )HEAD{1} ),操作(merge ),提交信息(Merge made by .. )等信息。
2.1.3 log 与reflog 比较
同:
- git reflog与git log用法大致相同,在git log上适用的参数在git reflog基本也是适用的。
异:
- reflog 是Git 操作的一道安全保障,它能够记录几乎所有本地仓库的改变。包括所有分支commit 提交,已经删除(其实并未被实际删除)commit 都会被记录。简单地说,只要HEAD 发生变化,就可以通过reflog 查看到。而log 只能查看提交的版本信息。
- reflog 的查询范围是所有分支的所有操作,而log 的查询范围是当前分支的提交记录。
2.1.4 查看详细的提交记录
通过 git log -p 命令可以查看更为详细的提交记录。
git log -p
运行结果如下:
可以看到,与前两个命令相比,这次的输出多了每次提交记录的文件变化等信息。
2.1.5 查看每次提交的简略统计信息
通过 git log --stat 命令可以查看每次提交的简略统计信息。
git log --stat
运行结果如下:
可以看到,与git log -p 命令相比,此次的命令输出结果更为直观,并且增加了统计信息。
2.2 查看部分记录
2.2.1 查看最近几条记录
通过 git log -p -n 命令可以支查看最近的几条提交记录。
例如,我想只查看最近的两次提交,只需要输入以下命令:
git log -p -2
运行结果如下:可以看到,界面中只输出了最近的两次提交。
2.2.2 指定文件名
通过gti log fileName 可以只查看与指定文件相关的提交记录。
例如,我想只查看关于C.txt 的提交记录,只需要输入以下命令:
git log C.txt
运行结果如下:
可以看到,界面中输出的都是与C.txt 相关的提交。
同理,我们也可以只查看与指定目录相关的提交记录。而这,只需要将文件名改为目录名即可。
git log AA/
2.2.3 指定标签之前
通过git log tagName 命令可以查看在打标签位置之前的提交记录。
例如,我想查看标签show 前面的提交记录,只需要输入以下命令:
git log show
运行结果如下:
可以看到,界面中只输出了标签show 及其之前的提交记录。
2.2.4 指定分支
通过 git log branch1..branch2 可以查看branch2 分支历史提交记录,但是不包含branch1 分支历史记录。
例如,我想查看master 分支的提交记录,不想查看xi 分支的提交记录,只需要输入以下命令
git log xi..master
运行结果如下:
通过 git log branch1...branch2 可以查看branch2 和branch1 的分支历史记录。
例如,我想查看master 和xi 分支的提交记录,只需要输入以下命令:
git log xi...master
运行结果如下:
可以看到,这次的输出比上次多了提交信息为 add r 的提交,这是xi 分支上的提交记录。
2.2.5 指定commit
通过 git log commit 可以查看指定提交之前的提交记录。
例如,我想查看提交d0aba9 之前的提交记录,只需要输入以下命令:
git log d0aba9
运行结果如下:
可以看到,在d0aba9 之后的提交并没有被输出。
通过 git log commit...commit2 可以查看commit1 与commit2之 间的历史提交记录(不包含commit2 )。
例如,我想查看提交d0aba9 和56ce24 之间的提交记录,只需要输入以下命令:
git log d0aba9...56ce24
运行结果如下:
可以看到,界面中只输出了d0aba9 和le569a 的提交记录,并没有56ce24 的提交记录。
2.3 形象化输出
通过 git log --graph 命令可以更加形象的展示项目的分支,提交历史。
git log --graph
这里,借用别人的图片作为展示:
可以看到,输出中增加了一些 ASCII 字符串来形象地展示项目的分支、合并历史。
2.4 格式化输出
2.4.1 单行展示
通过git log --pretty=oneline 命令可以将每个提交放在一行显示,在浏览大量的提交时非常有用。
git log --pretty=oneline
运行结果如下:
可以看到,每个提交都只有一行的空间进行展示了。
另外,还有 short,full ,fuller,medium 等 选项,它们展示信息的格式基本一致,但是详尽程度不一:
2.4.2 自定义格式
通过 git log --pretty=format 命令可以自定义输出格式。
git log --pretty=format:'%h was %an, %ar, message: %s'
运行结果如下:
format参数值:
- %H:提交对象(commit)的完整哈希字串
- %h:提交对象的简短哈希字串
- %T:树对象(tree)的完整哈希字串
- %t:树对象的简短哈希字串
- %P:父对象(parent)的完整哈希字串
- %p:父对象的简短哈希字串
- %an:作者(author)的名字
- %ae:作者的电子邮件地址
- %ad:作者修订日期(可以用 -date= 选项定制格式)
- %ar:作者修订日期,按多久以前的方式显示
- %cn:提交者(committer)的名字
- %ce:提交者的电子邮件地址
- %cd:提交日期
- %cr:提交日期,按多久以前的方式显示
- %s:提交说明
2.4.3 排序输出
通过git log --date-order 命令可以使提交记录按时间顺序输出。
git log --pretty=format:'%h : %cd : %s' --date-order
运行结果如下:
通过git log --topo-order 命令可以使提交记录按拓朴顺序输出。
`git log --pretty=format:'%h : %cd : %s' --topo-order
2.5 按照日期查看提交记录
2.5.1 指定时间之前
通过git log --before 命令可以查看在指定日期之前(包含该日期 )的提交记录。
例如,我想查看不是今天(20200507)提交的记录,只需要输入以下命令:
git log --before="20120-5-6" --pretty=format:'%h : %cd : %s'
运行结果如下:
可以看到,输出中,并没有今天的提交记录。
至于为什么没有昨天的提交记录,明明昨天有做提交啊?那是因为git log 命令只查询当前分支的记录。昨天是在master 分支上进行操作,而今天我们主要是在 xi 分支上进行操作( 前面有一步运行前我切换分支了 )。
另外,我们也可以用--until 代替--before ,两者功能是一样的。
2.5.2 指定时间之后
通过git log --after 命令可以查看在指定日期之后(包含该日期 )的提交记录。
例如,我想查看今年4月30号之后的提交记录,只需要输入以下命令:
git log --after="20120-4-30" --pretty=format:'%h : %cd : %s'
运行结果如下:
可以看到,输出中只有4月30号及之后的提交记录。
另外,我们也可以用--since 代替--after,两者功能是一样的。
2.6 按照提交信息查看提交记录
通过git log --grep 命令可以查看模糊匹配指定提交信息的提交记录。
例如,我想查找提交信息中包含" add "的提交记录,只需要输入以下命令:
git log --pretty=oneline --grep="add"
运行结果如下:
可以看到,在输出中,每条记录的提交信息都包含 add 字符串。
2.7 按照作者或邮箱查看提交记录
通过git log --author 命令可以查看指定作者的提交记录。
例如,我想查看作者为anxinghei 的提交记录,只需要输入以下命令:
git log --pretty=oneline --author="anxinghei"
运行结果如下:
特别说明:如果同时使用--grep 和--author 筛选,需要附加--all-match 参数。
2.8 按照文件内容查看提交记录
通过 git log -S 命令可以查看内容中含有指定信息的文件所在的提交。
例如,我想查找内容包含“A ”的文件所在的提交记录,只需要输入以下命令:
git log -S "A"
运行结果如下:
如果想使用正则表达式去匹配而不是字符串,那么你可以使用-G 代替-S 。
三、总结
总结:今天,我们主要学习了如何根据某些条件来查找日志。用到的命令有
- 查看所有分支的所有操作
git reflog
- 查看当前分支的提交
git log
- 查看的提交的信息较为详细
git log -p
- 查看的提交拥有统计信息
git log --stat
- 单行展示
git log --pretty=oneline
- 格式化输出
git log --pretty=format
- 按照日期查找提交记录
git log --before/after
- 查找提交信息模糊匹配对应信息的提交
git log --grep
- 查找对应作者的提交
git log --author
- 查找被提交文件中拥有指定内容的提交
git log -S
至此,本文结束。我是陈冰安,一个Java学习者。欢迎关注我的公众号【暗星涌动】,愿与你一同进步。