Git命令进阶操作:日志格式化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git命令进阶操作:日志格式化相关的知识,希望对你有一定的参考价值。

参考技术A 在本文中,我们会深入探讨如何对git log命令的输出进行格式化。大部分git log命令的可选项,可以帮你选择输出内容中包含每次提交的哪些信息。

如果你不喜欢默认的git log输出格式,可以在git config中配置下面将要介绍的一些格式化能力的别名。

--oneline选项会把提交信息压缩输出在单行。默认情况下,只显示commit id和commit message的第一行内容。典型的git log --oneline命令的输出会像下面一样:

这些内容对于搞清楚项目的概貌比较有用。

很多时候,了解每一次提交所关联的分支或者tag是非常有用的。--decorate选项会让git log命令输出的同时显示关联引用(比如分支,tag之类的信息)。

这些选项也可以与其他选项同时使用。比如运行git log --oneline --decorate会输出形如下面的内容:

上面输出内容的第一行告诉你这次提交也同时是当前检出的HEAD指针,并显示它也是main分支的顶端。第二行的提交指向了另外一个分支名叫feature。最后第四行显示这次提交被打上了v0.9的标签。

分支,标签,HEAD以及提交 历史 几乎是Git仓库中包含的所有信息了,所以这个输出内容展示出仓库中更加完整的逻辑结构。

git log命令包括很多用于展示diff的选项。两个最常见的选项是--stat和-p。

--stat选项显示了每次提交中删除和插入的代码行数(请注意修改一行意味着一行插入和一行删除)。如果仅需要查看提交所含有的变更简报那么使用这个命令就可以了。下面的例子中显示这次提交改变一个文件:hello.py,并对它进行了67行插入和38行删除的操作。

文件名旁边的+和-符号代表文件被改变行数的相对数。这些信息大概显示出什么样的修改可能出现在哪次提交中。

如果你想看到这次提交涉及到的实际变更,为git log命令添加-p选项。这会输出提交中的完整变更内容:

对于含有大量修改的提交,上面的命令会输出过长的内容,这显得有点愚蠢。常见的情况是如果你要展示完整的变更,一般是为了寻找特定的修改。对于此种情况,应该使用pickaxe功能。

git shortlog命令是git log命令的特殊版,多数时候用于创建版本描述。它会将commit message的第一行按照提交人进行分组显示。便于查看谁在做什么。

比如对于一个项目,有两个开发者进行了5次提交,git shortlog的输出看上去大概是下面这样:

默认情况下,git shortlog会按照提交人的名称进行排序,但你也可以传入-n选项让输出内容按照提交人的提交数量进行排序。

--graph选项使用ASCII图形来表示提交 历史 中的分支关系。这个选项通常会与--oneline和--decorate选项关联使用,这样输出内容就会显而易见地看到提交的归属分支:

对于一个简单的仅含有2个分支的仓库,上面的命令输出内容大致如下:

星号表示提交是发生在那个分支上的,所以上面的图告诉我们23ad9ad和16b36c6这两次提交发生在功能分支上,剩下的提交都发生在main分支上。

对于简单的仓库来说上面的例子已经足够好用,但是对于更加依赖大量分支的仓库来说,可能会更倾向于使用具有完整功能的可视化工具,比如gitk或者sourcetree。

对于其他定制化的日志展示需求,你完全可以使用--pretty=format:""选型来实现。这个选项允许你对输出内容进行完整的定制,不过你需要使用printf类型的占位符。

举例来说,下面的命令中%cn, %h 和 %cd字符分别会被展开为提交人名称,代表提交的短哈希,以及提交日期时间:

输出内容如下:

关于占位符的列表可以在这里找到。

除了用来显示有用的提交信息,在把git log的内容通过管道输出到其他命令的标准输入时,--pretty=format:""选项能够发挥更大的作用。

现在你应该已经能够熟练并且舒服的使用git log的高级参数来格式化适合自己的日志输出。这有助于你能够抽取项目 历史 的有用信息。

这些新技能是Git工具包中的重要组成部分,但是记住git log经常与其他Git命令关联使用。一旦找到你所关心的那次提交,通常来说你都会需要使用git checkout,git revert或者其他什么命令来操作这次提交。所以,还需持续不断的学习Git的高级功能。

以上是关于Git命令进阶操作:日志格式化的主要内容,如果未能解决你的问题,请参考以下文章

Git进阶:Git 常用操作汇总

Git命令学习之旅——日志和穿梭版本

如何更改 Git 日志日期格式

HDFS审计日志格式及说明

Git命令学习之旅——日志和穿梭版本号

Git配置及使用(使用云服务器)