• Git系列讲解 —— 提交日志(git log)的使用


    git log命令提供了很多子选项,善于使用这些选项可以加快工程师调查问题的效率,下面以ccache的项目举例讲解。

    1. git log

    完整的commit id,作者,提交日期,注释

    在这里插入图片描述


    2. pretty模式 [ git log --pretty= ]

    这个pretty可以理解为对git log默认输出的美化,包含几个子选项,使用者可依据自己的需求选择其一使用。

    参数说明
    email以邮件的形式输出日志,方便写邮件的时候用
    full与默认格式相比,少了日期,多了提交者
    fuller与默认格式相比,多了作者日期,提交者,提交日期
    medium与默认格式一样
    oneline每笔提交单行显示,和git log --oneline相比,commit id是全的
    raw与默认格式相比,少了日期,多了提交者,tree,parent,gpg签名
    short只有作者和提交注释,且注释是一行显示
    format:自定义显示输出格式

    2.1 git log --pretty=email

    在这里插入图片描述

    2.2 git log --pretty=full

    在这里插入图片描述

    2.3 git log --pretty=fuller

    在这里插入图片描述

    2.4 git log --pretty=medium

    在这里插入图片描述

    2.5 git log --pretty=oneline

    在这里插入图片描述

    2.6 git log --pretty=raw

    在这里插入图片描述

    2.7 git log --pretty=short

    在这里插入图片描述

    2.8 git log --pretty=format:

    在这里插入图片描述

    format的选项太多了,这里就不细讲了,下面是从手册中摘抄的说明,读者有时间可以根据自己的需要进行学习。

    ·   %H: commit hash
    ·   %h: abbreviated commit hash
    ·   %T: tree hash
    ·   %t: abbreviated tree hash
    ·   %P: parent hashes
    ·   %p: abbreviated parent hashes
    ·   %an: author name
    ·   %aN: author name (respecting .mailmap, see git-shortlog(1) or git-blame(1))
    ·   %ae: author email
    ·   %aE: author email (respecting .mailmap, see git-shortlog(1) or git-blame(1))
    ·   %ad: author date (format respects --date= option)
    ·   %aD: author date, RFC2822 style
    ·   %ar: author date, relative
    ·   %at: author date, UNIX timestamp
    ·   %ai: author date, ISO 8601-like format
    ·   %aI: author date, strict ISO 8601 format
    ·   %cn: committer name
    ·   %cN: committer name (respecting .mailmap, see git-shortlog(1) or git-blame(1))
    ·   %ce: committer email
    ·   %cE: committer email (respecting .mailmap, see git-shortlog(1) or git-blame(1))
    ·   %cd: committer date (format respects --date= option)
    ·   %cD: committer date, RFC2822 style
    ·   %cr: committer date, relative
    ·   %ct: committer date, UNIX timestamp
    ·   %ci: committer date, ISO 8601-like format
    ·   %cI: committer date, strict ISO 8601 format
    ·   %d: ref names, like the --decorate option of git-log(1)
    ·   %D: ref names without the " (", ")" wrapping.
    ·   %e: encoding
    ·   %s: subject
    ·   %f: sanitized subject line, suitable for a filename
    ·   %b: body
    ·   %B: raw body (unwrapped subject and body)
    ·   %N: commit notes
    ·   %GG: raw verification message from GPG for a signed commit
    ·   %G?: show "G" for a good (valid) signature, "B" for a bad signature, "U" for a good signature with unknown validity, "X" for a good signature that has expired, "Y" for a good
        signature made by an expired key, "R" for a good signature made by a revoked key, "E" if the signature cannot be checked (e.g. missing key) and "N" for no signature
    ·   %GS: show the name of the signer for a signed commit
    ·   %GK: show the key used to sign a signed commit
    ·   %gD: reflog selector, e.g., refs/stash@{1} or refs/stash@{2 minutes ago}; the format follows the rules described for the -g option. The portion before the @ is the refname as given on
        the command line (so git log -g refs/heads/master would yield refs/heads/master@{0}).
    ·   %gd: shortened reflog selector; same as %gD, but the refname portion is shortened for human readability (so refs/heads/master becomes just master).
    ·   %gn: reflog identity name
    ·   %gN: reflog identity name (respecting .mailmap, see git-shortlog(1) or git-blame(1))
    ·   %ge: reflog identity email
    ·   %gE: reflog identity email (respecting .mailmap, see git-shortlog(1) or git-blame(1))
    ·   %gs: reflog subject
    ·   %Cred: switch color to red
    ·   %Cgreen: switch color to green
    ·   %Cblue: switch color to blue
    ·   %Creset: reset color
    ·   %C(...): color specification, as described under Values in the "CONFIGURATION FILE" section of git-config(1). By default, colors are shown only when enabled for log output (by
        color.diff, color.ui, or --color, and respecting the auto settings of the former if we are going to a terminal).  %C(auto,...)  is accepted as a historical synonym for the default
        (e.g., %C(auto,red)). Specifying %C(always,...) will show the colors even when color is not otherwise enabled (though consider just using `--color=always to enable color for the whole
        output, including this format and anything else git might color).  auto alone (i.e.  %C(auto)) will turn on auto coloring on the next placeholders until the color is switched again.
    ·   %m: left (<), right (>) or boundary (-) mark
    ·   %n: newline
    ·   %%: a raw %
    ·   %x00: print a byte from a hex code
    ·   %w([<w>[,<i1>[,<i2>]]]): switch line wrapping, like the -w option of git-shortlog(1).
    ·   %<(<N>[,trunc|ltrunc|mtrunc]): make the next placeholder take at least N columns, padding spaces on the right if necessary. Optionally truncate at the beginning (ltrunc), the middle
        (mtrunc) or the end (trunc) if the output is longer than N columns. Note that truncating only works correctly with N >= 2.
    ·   %<|(<N>): make the next placeholder take at least until Nth columns, padding spaces on the right if necessary
    ·   %>(<N>), %>|(<N>): similar to %<(<N>), %<|(<N>) respectively, but padding spaces on the left
    ·   %>>(<N>), %>>|(<N>): similar to %>(<N>), %>|(<N>) respectively, except that if the next placeholder takes more spaces than given and there are spaces on its left, use those spaces
    ·   %><(<N>), %><|(<N>): similar to %<(<N>), %<|(<N>) respectively, but padding both sides (i.e. the text is centered)
    ·   %(trailers[:options]): display the trailers of the body as interpreted by git-interpret-trailers(1). The trailers string may be followed by a colon and zero or more comma-separated
        options. If the only option is given, omit non-trailer lines from the trailer block. If the unfold option is given, behave as if interpret-trailer’s --unfold option was given. E.g.,
        %(trailers:only,unfold) to do both.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69

    3. 单行输出

    3.1 git log --oneline

    git log --pretty=oneline差不多,都是每笔提交一行输出(commitID comment),不同的git log --oneline的commit id是缩写的。

    当第一行注释和第二行注释之间有空行,就只会显示第一行注释,比如下图的最新提交(80a228c3),对照git log默认输出的就只显示了第一行注释。
    在这里插入图片描述

    3.2 git log --oneline

    以单行模式输出某文件的所有提交记录。


    4. 输出每笔提交内容变更量统计

    4.1 git log --stat

    在这里插入图片描述

    4.2 git log --stat

    输出某文件的所有提交记录及其变更量统计。


    5. 输出所有提交的变更内容

    5.1 git log -p

    输出每笔提交的记录以及其变更内容
    在这里插入图片描述

    5.2 git log -p

    输出某文件的所有提交记录及其变更内容。


    6. 显示某笔提交的变更情况 [ git show --stat commitID ]

    在这里插入图片描述


    7. 显示某笔提交的变更内容 [ git show commitID ]

    在这里插入图片描述


    8. 指定日期格式 [ git log --date= ]

    命令后接下面选项:

    选项举例
    defaultThu Aug 25 21:15:01 2022 +0200
    iso86012022-08-25 21:15:01 +0200
    localFri Aug 26 03:15:01 2022
    raw1661454901 +0200
    relative2 个月前
    rfc2822Thu, 25 Aug 2022 21:15:01 +0200
    short2022-08-25

    9. 依据某条件筛选显示

    选项说明
    -n显示前n笔提交
    --skip=n不显示前n笔提交
    --author=<字符串>筛选出与字符串匹配的作者的提交,比如字符串是"Joel",那么会显示作者是"Joel abc"和"Joel def"等。
    --committer=<字符串>筛选出与字符串匹配的提交者的提交
    --since=<日期>, --after=<日期>显示指定时间之后的提交
    --until=<日期>, --before=<日期>显示指定时间之前的提交
    --grep=<字符串>显示提交说明中包含指定字符串的提交,见下面案例
    -S <字符串>显示添加或删除内容匹配指定字符串的提交,见下面案例
    -i忽略大小写进行匹配,可以搭配其他选项一起使用

    案例:
    现有一个git仓库,master分支包含了笔提交,管理两个文件(1.txt,2.txt)。
    在这里插入图片描述

    git log --grep="modify 1.txt"

    查找commit message中包含"modify 1.txt"的提交。
    在这里插入图片描述

    git log -S "testvar = 1"

    我们知道每笔提交都包含文件内容的变更(增加和删除),-S的作用就是从这些变更内容中找到要查找的内容(testvar = 1),并将其git日志输出来。注意要和--grep区分开来,--grep搜索的是提交信息,而-S是搜索提交中的变更内容(git管理的文件,代码等)

    在这里插入图片描述

    我们把上面命令稍作修改,变成 git log -S "testvar = 1" --pretty="%H" | xargs git show,这样就可以看到-S筛选出来的三笔提交,其变更内容都是包含了指定内容(testvar = 1)

    在这里插入图片描述


    10. 输出文件每行的提交记录

    10.1 git blame

    输出指定文件中每行内容的最近一笔提交信息。
    在这里插入图片描述

    10.2 git blame -L <开始行数>,<结束行数>

    输出某文件从第几行到第几行的最近一笔提交记录
    在这里插入图片描述

    git blame -L 5,5               代表第5行的提交记录
    git blame  | tail -n <行数>     搭配tail命令还可以显示最后多少行的提交记录
    
    • 1
    • 2
  • 相关阅读:
    RK3399平台开发系列讲解(内核调试篇)2.50、嵌入式产品启动速度优化
    红包派送逻辑代码
    xss攻击
    C语言的stdio.h的介绍
    二叉树题目:二叉树剪枝
    OneFlow v0.6.0正式发布
    单元格法近似求解多边形最大内接矩形问题【思路讲解+java实现】
    Linux软件:Linux如何使用源码方式安装rabbitmq并设置开机自启
    23年7/8月前端面试题总结
    了解并应用数字隔离器的安全限值
  • 原文地址:https://blog.csdn.net/In_engineer/article/details/127666363