在git日志中仅显示标记的提交

时间:2019-07-08 15:15:56

标签: git

我正在寻找一种显示git日志的方法,按提交顺序排序,显示其日期,还仅显示具有标签的提交。

我们的Web主机具有一个自动部署系统,当特定的提交提交到生产环境时,它上面会带有一个特定的标签。我正在对问题进行故障排除,我只想查看生产中已提交的那些提交。

我能够制作一个git别名,称为nanolog,如下所示:

nanolog = log --date-order --date=format:'%Y-%m-%d %H:%M:%S' --format='%C(yellow)%cd%Creset  %h  \"%s\"  %Cred%cn %Cgreen(%cr)'

这给了我这样的日志:

2019-06-17 23:39:43  13f7e5f89  "Merge branch 'live-config' into int"  Webhost (3 weeks ago)
2019-06-17 23:24:20  32b6141dc  "Merge branch 'live-config' into int"  User Name (3 weeks ago)

我查看了the documentation for git log,并且在关于--format的部分中(我用来指定在nanolog别名中显示哪些信息的内容),显示标签的方式。我看着pretty formats documentation,同样也找不到指定标签信息的方法。

在股票git log中,您会在提交哈希旁边看到标签:

commit d1d59f2fe151d1eb240b453e6efe76e4dfe13a93 (tag: webhost_test_198, tag: webhost_live_114, origin/06-24, 06-24)
Merge: 13f7e5f89 143b58189
Author: Webhost <webhost@webhost.com>
Date:   Fri Jun 21 20:25:24 2019 +0000

    Merged int into master

在股票git log(包括标签信息以及所有其他未加标签的提交)中滚动是相当费力的,而且容易出错。如何获得简短的日志,仅显示带有标签的提交?

理想情况下,我想要这样的东西:

2019-06-17 23:39:43  13f7e5f89 (tag: webhost_test_198, tag: webhost_live_114, origin/06-24, 06-24) "Merge branch 'live-config' into int"  Webhost (3 weeks ago)
2019-06-03 23:24:20  32b6141dc (tag: webhost_test_197, tag: webhost_live_113,)  "Merge branch 'live-config' into int"  User Name (5 weeks ago)

1 个答案:

答案 0 :(得分:1)

让我们从模拟回购上的简单--oneline输出开始,仅最后三次提交

git log --oneline -3

4c37e97 fixed a bug in sub-feature F1
d9c4599 added sub-feature F1
06014cb changed part XYZ

现在,如果我们使用--decorate标志添加装饰(指向提交的引用,即标记和分支):

git log --oneline --decorate -3

4c37e97 (HEAD -> feature/abc) fixed a bug in sub-feature F1
d9c4599 added sub-feature F1
06014cb (tag: release/1.22) changed part XYZ

在这一点上,您还可以添加--simplify-by-decoration标志以过滤掉任何标签/分支未引用的提交

git log --oneline --decorate --simplify-by-decoration -3

4c37e97 (HEAD -> feature/abc) fixed a bug in sub-feature F1
06014cb (tag: release/1.22) changed part XYZ
eec8aad (master) some older change

但是在您使用特定格式的情况下,您可以使用%d

如果我们修改您的nanolog,在我的示例中,它将输出以下内容:

git nanolog -3

2019-07-08 19:19:46  4c37e97  "fixed a bug in sub-feature F1"  Romain (69 seconds ago)
2019-07-08 19:19:11  d9c4599  "added sub-feature F1"  Romain (2 minutes ago)
2019-07-08 19:18:26  06014cb  "changed part XYZ"  Romain (2 minutes ago)

进入这个

    nanolog2 = log --date-order --date=format:'%Y-%m-%d %H:%M:%S' --format='%C(yellow)%cd%Creset  %h  \"%d %s\"  %Cred%cn %Cgreen(%cr)'

...我们将获得

git nanolog2 -3

2019-07-08 19:19:46  4c37e97  " (HEAD -> feature/abc) fixed a bug in sub-feature F1"  Romain (12 minutes ago)
2019-07-08 19:19:11  d9c4599  " added sub-feature F1"  Romain (13 minutes ago)
2019-07-08 19:18:26  06014cb  " (tag: release/1.22) changed part XYZ"  Romain (14 minutes ago)

最后,是的,您可以将其通过管道传递到grep "(tag:"或仅grep tag,以过滤出仅包含分支但不包含标签的提交。