在本文中,咱们会深入探讨怎么对git log
指令的输出进行格局化。大部分git log
指令的可选项,可以帮你挑选输出内容中包含每次提交的哪些信息。
假如你不喜欢默许的git log
输出格局,可以在git config
中配置下面即将介绍的一些格局化才能的别号。
Oneline
--oneline
选项会把提交信息压缩输出在单行。默许状况下,只显现commit id和commit message的榜首行内容。典型的git log --oneline
指令的输出会像下面一样:
0e25143 Merge branch 'feature'
ad8621a Fix a bug in the feature
16b36c6 Add a new feature
23ad9ad Add the initial code base
这些内容关于搞清楚项目的概貌比较有用。
Decorate
许多时候,了解每一次提交所相关的分支或许tag对错常有用的。--decorate
选项会让git log
指令输出的一起显现相关引证(比如分支,tag之类的信息)。
这些选项也可以与其他选项一起运用。比如运行git log --oneline --decorate
会输出形如下面的内容:
0e25143 (HEAD, main) Merge branch 'feature'
ad8621a (feature) Fix a bug in the feature
16b36c6 Add a new feature
23ad9ad (tag: v0.9) Add the initial code base
上面输出内容的榜首行告知你这次提交也一起是当前检出的HEAD
指针,并显现它也是main
分支的顶端。第二行的提交指向了另外一个分支名叫feature
。最后第四行显现这次提交被打上了v0.9
的标签。
分支,标签,HEAD以及提交前史几乎是Git库房中包含的所有信息了,所以这个输出内容展现出库房中愈加完好的逻辑结构。
Diffs
git log
指令包含许多用于展现diff的选项。两个最常见的选项是--stat
和-p
。
--stat
选项显现了每次提交中删去和刺进的代码行数(请注意修正一行意味着一行刺进和一行删去)。假如仅需求查看提交所含有的改变简报那么运用这个指令就可以了。下面的比如中显现这次提交改动一个文件:hello.py
,并对它进行了67行刺进和38行删去的操作。
commit f2a238924e89ca1d4947662928218a06d39068c3
Author: John <john@example.com>
Date: Fri Jun 25 17:30:28 2014 -0500
Add a new feature
hello.py | 105 ++++++++++++++++++++++++-----------------
1 file changed, 67 insertion(+), 38 deletions(-)
文件名周围的+
和-
符号代表文件被改动行数的相对数。这些信息大约显现出什么样的修正或许出现在哪次提交中。
假如你想看到这次提交涉及到的实际改变,为git log
指令添加-p
选项。这会输出提交中的完好改变内容:
commit 16b36c697eb2d24302f89aa22d9170dfe609855b
Author: Mary <mary@example.com>
Date: Fri Jun 25 17:31:57 2014 -0500
Fix a bug in the feature
diff --git a/hello.py b/hello.py
index 18ca709..c673b40 100644
--- a/hello.py
+++ b/hello.py
@@ -13,14 +13,14 @@ B
-print("Hello, World!")
+print("Hello, Git!")
关于含有很多修正的提交,上面的指令会输出过长的内容,这显得有点愚蠢。常见的状况是假如你要展现完好的改变,一般是为了寻找特定的修正。关于此种状况,应该运用pickaxe功用。
Shortlog
git shortlog
指令是git log
指令的特殊版,大都时候用于创建版本描绘。它会将commit message的榜首行依照提交人进行分组显现。便于查看谁在做什么。
比如关于一个项目,有两个开发者进行了5次提交,git shortlog
的输出看上去大约是下面这样:
Mary (2):
Fix a bug in the feature
Fix a serious security hole in our framework
John (3):
Add the initial code base
Add a new feature
Merge branch 'feature'
默许状况下,git shortlog
会依照提交人的名称进行排序,但你也可以传入-n
选项让输出内容依照提交人的提交数量进行排序。
Graph
--graph
选项运用ASCII图形来表明提交前史中的分支联系。这个选项一般会与--oneline
和--decorate
选项相关运用,这样输出内容就会显而易见地看到提交的归属分支:
git log --graph --oneline --decorate
关于一个简略的仅含有2个分支的库房,上面的指令输出内容大致如下:
* 0e25143 (HEAD, main) Merge branch 'feature'
|\
| * 16b36c6 Fix a bug in the new feature
| * 23ad9ad Start a new feature
* | ad8621a Fix a critical security issue
|/
* 400e4b7 Fix typos in the documentation
* 160e224 Add the initial code base
星号表明提交是产生在那个分支上的,所以上面的图告知咱们23ad9ad
和16b36c6
这两次提交产生在功用分支上,剩下的提交都产生在main
分支上。
关于简略的库房来说上面的比如现已足够好用,可是关于愈加依赖很多分支的库房来说,或许会更倾向于运用具有完好功用的可视化东西,比如gitk
或许sourcetree
。
自定义格局
关于其他定制化的日志展现需求,你完全可以运用--pretty=format:""
选型来实现。这个选项答应你对输出内容进行完好的定制,不过你需求运用printf
类型的占位符。
举例来说,下面的指令中%cn
, %h
和 %cd
字符分别会被展开为提交人名称,代表提交的短哈希,以及提交日期时间:
git log --pretty=format:"%cn committed %h on %cd"
输出内容如下:
John committed 400e4b7 on Fri Jun 24 12:30:04 2014 -0500
John committed 89ab2cf on Thu Jun 23 17:09:42 2014 -0500
Mary committed 180e223 on Wed Jun 22 17:21:19 2014 -0500
John committed f12ca28 on Wed Jun 22 13:50:31 2014 -0500
关于占位符的列表可以在这里找到。
除了用来显现有用的提交信息,在把git log
的内容通过管道输出到其他指令的标准输入时,--pretty=format:""
选项可以发挥更大的效果。
总结
现在你应该现已可以娴熟而且舒畅的运用git log
的高档参数来格局化合适自己的日志输出。这有助于你可以抽取项目前史的有用信息。
这些新技能是Git东西包中的重要组成部分,可是记住git log
经常与其他Git指令相关运用。一旦找到你所关心的那次提交,一般来说你都会需求运用git checkout
,git revert
或许其他什么指令来操作这次提交。所以,还需继续不断的学习Git的高档功用。