Git 系列 3:如何使用日志命令助力你的工作?

@[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参数值:

  1. %H:提交对象(commit)的完整哈希字串
  2. %h:提交对象的简短哈希字串
  3. %T:树对象(tree)的完整哈希字串
  4. %t:树对象的简短哈希字串
  5. %P:父对象(parent)的完整哈希字串
  6. %p:父对象的简短哈希字串
  7. %an:作者(author)的名字
  8. %ae:作者的电子邮件地址
  9. %ad:作者修订日期(可以用 -date= 选项定制格式)
  10. %ar:作者修订日期,按多久以前的方式显示
  11. %cn:提交者(committer)的名字
  12. %ce:提交者的电子邮件地址
  13. %cd:提交日期
  14. %cr:提交日期,按多久以前的方式显示
  15. %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 。

三、总结

总结:今天,我们主要学习了如何根据某些条件来查找日志。用到的命令有

  1. 查看所有分支的所有操作
git reflog 
  1. 查看当前分支的提交
git log
  1. 查看的提交的信息较为详细
git log -p 
  1. 查看的提交拥有统计信息
git log --stat
  1. 单行展示
git log --pretty=oneline 
  1. 格式化输出
git log --pretty=format 
  1. 按照日期查找提交记录
git log --before/after
  1. 查找提交信息模糊匹配对应信息的提交
git log --grep 
  1. 查找对应作者的提交
git log --author 
  1. 查找被提交文件中拥有指定内容的提交
git log -S 

至此,本文结束。我是陈冰安,一个Java学习者。欢迎关注我的公众号【暗星涌动】,愿与你一同进步。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容