Git 中文参考(三)(1)https://developer.aliyun.com/article/1565820
提交订购
默认情况下,提交以反向时间顺序显示。
--date-order
在显示所有子项之前不显示父项,但在提交时间戳顺序中显示提交。
--author-date-order
在显示所有子项之前不显示父项,但在作者时间戳顺序中显示提交。
--topo-order
在显示所有子项之前不显示父项,并避免在多行历史记录中显示混合的提交。
例如,在这样的提交历史中:
---1----2----4----7 \ \ 3----5----6----8---
其中数字表示提交时间戳的顺序,git rev-list
和--date-order
的朋友按时间戳顺序显示提交:8 7 6 5 4 3 2 1。
使用--topo-order
,他们将显示 8 6 5 3 7 4 2 1(或 8 7 4 2 6 5 3 1);为了避免将两个并行开发轨道的提交混合在一起,显示一些较旧的提交在较新的提交之前。
--reverse
输出要以相反顺序显示的提交(请参阅上面的“提交限制”部分)。不能与--walk-reflogs
结合使用。
对象遍历
这些选项主要用于打包 Git 存储库。
--no-walk[=(sorted|unsorted)]
只显示给定的提交,但不要遍历他们的祖先。如果指定了范围,则无效。如果给出了参数unsorted
,则提交将按命令行中给出的顺序显示。否则(如果sorted
或没有给出参数),提交按提交时间以反向时间顺序显示。不能与--graph
结合使用。
--do-walk
覆盖之前的--no-walk
。
提交格式
--pretty[=<format>]
--format=<format>
以给定格式打印提交日志的内容,其中 < format> 可以是 oneline ,_ 短 , 培养基 , 全 , 更丰富 , 之一电子邮件 , 原始 , 格式:< string>_ 和 tformat:< string> 。当 < format> 不属于上述情况,并且其中包含 _%占位符 _,其行为就像 –pretty = tformat:< format> 给出了。
有关每种格式的一些其他详细信息,请参阅“PRETTY FORMATS”部分。当 =< format> 部分省略,默认为 medium 。
注意:您可以在存储库配置中指定默认的漂亮格式(请参阅 git-config [1] )。
--abbrev-commit
而不是显示完整的 40 字节十六进制提交对象名称,而只显示部分前缀。可以使用“–abbrev =< n>”指定非默认位数(如果显示,也会修改 diff 输出)。
对于使用 80 列终端的人来说,这应该使“–pretty = oneline”更具可读性。
--no-abbrev-commit
显示完整的 40 字节十六进制提交对象名称。这否定了--abbrev-commit
以及暗示它的选项,例如“–oneline”。它还会覆盖log.abbrevCommit
变量。
--oneline
这是一起使用的“–pretty = oneline --abbrev-commit”的简写。
--encoding=<encoding>
提交对象在其编码头中记录用于日志消息的编码;此选项可用于告诉命令以用户首选的编码重新编码提交日志消息。对于非管道命令,默认为 UTF-8。请注意,如果一个对象声称在X
中编码并且我们在X
中输出,我们将逐字输出该对象;这意味着原始提交中的无效序列可能会复制到输出中。
--expand-tabs=<n>
--expand-tabs
--no-expand-tabs
执行选项卡扩展(将每个选项卡替换为足够的空格以填充到日志消息中的 < n> 的倍数的下一个显示列),然后在输出中显示它。 --expand-tabs
是--expand-tabs=8
的简写,--no-expand-tabs
是--expand-tabs=0
的简写,它会禁用制表符扩展。
默认情况下,选项卡以相当格式展开,将日志消息缩进 4 个空格(即 medium ,默认情况下, full 和 fulller )。
--notes[=<treeish>]
在显示提交日志消息时,显示注释提交的注释(请参阅 git-notes [1] )。当命令行中没有给出--pretty
,--format
或--oneline
选项时,这是git log
,git show
和git whatchanged
命令的默认值。
默认情况下,显示的注释来自core.notesRef
和notes.displayRef
变量(或相应的环境覆盖)中列出的注释 refs。有关详细信息,请参阅 git-config [1] 。
使用可选的 < treeish> 参数,使用树形查找要显示的注释。树形可以在以refs/notes/
开头时指定完整的引用名称;当它以notes/
开始时,refs/
和其他refs/notes/
作为前缀以形成 ref 的全名。
可以组合多个–notes 选项来控制显示哪些音符。示例:“ - notes = foo”将仅显示“refs / notes / foo”中的注释; “–notes = foo --notes”将显示“refs / notes / foo”和默认音符 ref(s)中的两个音符。
--no-notes
不要显示笔记。这取消了上面的--notes
选项,通过重置显示注释的注释列表。选项按命令行中给出的顺序进行解析,例如, “–notes --notes = foo --no-notes --notes = bar”只会显示“refs / notes / bar”中的注释。
--show-notes[=<treeish>]
--[no-]standard-notes
不推荐使用这些选项。请使用上面的–notes / - no-notes 选项。
--show-signature
通过将签名传递给gpg --verify
并显示输出来检查已签名的提交对象的有效性。
--relative-date
--date=relative
的同义词。
--date=<format>
仅对以人类可读格式显示的日期生效,例如使用--pretty
时。 log.date
config 变量为日志命令的--date
选项设置默认值。默认情况下,日期显示在原始时区(提交者或作者)中。如果-local
附加到格式(例如,iso-local
),则使用用户的本地时区。
--date=relative
显示相对于当前时间的日期,例如“2 小时前”。 -local
选项对--date=relative
无效。
--date=local
是--date=default-local
的别名。
--date=iso
(或--date=iso8601
)以类似 ISO 8601 的格式显示时间戳。与严格的 ISO 8601 格式的区别在于:
- 空格而不是
T
日期/时间分隔符 - 时区和时区之间的空间
- 时区的小时和分钟之间没有冒号
--date=iso-strict
(或--date=iso8601-strict
)以严格的 ISO 8601 格式显示时间戳。
--date=rfc
(或--date=rfc2822
)以 RFC 2822 格式显示时间戳,通常在电子邮件中找到。--date=short
仅以YYYY-MM-DD
格式显示日期,但不显示时间。--date=raw
显示自纪元以来的秒数(1970-01-01 00:00:00 UTC),后跟一个空格,然后将时区显示为与 UTC 的偏移量(+
或-
与四位数;前两位是小时,后两位是分钟)。即,好像时间戳是用strftime("%s %z")
格式化的。请注意,-local
选项不会影响秒 - 自 - 纪元值(始终以 UTC 为单位),但会切换附带的时区值。--date=human
如果时区与当前时区不匹配则显示时区,如果匹配则不显示整个日期(即跳过“今年”日期的打印年份,但也跳过整个日期如果它是在过去几天,我们可以说它是什么工作日)。对于较旧的日期,小时和分钟也被省略。--date=unix
将日期显示为 Unix 纪元时间戳(自 1970 年以来的秒数)。与--raw
一样,它始终为 UTC,因此-local
无效。--date=format:...
将格式...
输入系统strftime
,%z 和%Z 除外,它们在内部处理。使用--date=format:%c
以系统区域设置的首选格式显示日期。有关格式占位符的完整列表,请参阅strftime
手册。使用-local
时,正确的语法是--date=format-local:...
。--date=default
是默认格式,类似于--date=rfc2822
,但有一些例外:- 星期几之后没有逗号
- 使用本地时区时,省略时区
--parents
同时打印提交的父级(以“提交父级”的形式)。也可以启用父重写,请参阅上面的 _ 历史简化 _。
--children
同时打印提交的子项(以“提交子项…”的形式)。也可以启用父重写,请参阅上面的 _ 历史简化 _。
--left-right
标记可以从中获取提交的对称差异的哪一侧。左侧的提示以<
为前缀,右侧的提示以>
为前缀。如果与--boundary
结合使用,则这些提交以-
为前缀。
例如,如果您有此拓扑:
y---b---b branch B / \ / / . / / \ o---x---a---a branch A
你会得到这样的输出:
$ git rev-list --left-right --boundary --pretty=oneline A...B >bbbbbbb... 3rd on b >bbbbbbb... 2nd on b <aaaaaaa... 3rd on a <aaaaaaa... 2nd on a -yyyyyyy... 1st on b -xxxxxxx... 1st on a
--graph
在输出的左侧绘制提交历史的基于文本的图形表示。这可能会导致在提交之间打印额外的行,以便正确绘制图形历史记录。不能与--no-walk
结合使用。
这使父进行重写,参见上面的 _ 历史简化 _。
默认情况下,这意味着--topo-order
选项,但也可以指定--date-order
选项。
--show-linear-break[=<barrier>]
当不使用–graph 时,所有历史分支都被展平,这使得很难看出两个连续的提交不属于线性分支。在这种情况下,此选项会在它们之间设置障碍。如果指定了,则显示的是字符串而不是默认字符串。
差异格式化
下面列出了控制 diff 输出格式的选项。其中一些特定于 git-rev-list [1] ,但是可以给出其他差异选项。有关更多选项,请参阅 git-diff-files [1] 。
-c
使用此选项,合并提交的 diff 输出同时显示每个父项与合并结果的差异,而不是一次显示父项和结果之间的成对差异。此外,它仅列出从所有父母修改的文件。
--cc
这个标志意味着-c
选项并通过省略不感兴趣的帅哥进一步压缩补丁输出,其中父母的内容只有两个变体,合并结果选择其中一个而不做修改。
-m
此标志使合并提交像常规提交一样显示完整差异;对于每个合并父项,将生成单独的日志条目和差异。一个例外是,当给出--first-parent
选项时,只显示对第一个父项的差异;在这种情况下,输出表示合并带来的变化 _ 进入当前分支的 _。
-r
显示递归差异。
-t
在 diff 输出中显示树对象。这意味着-r
。
漂亮的格式
如果提交是合并,并且如果漂亮格式不是 oneline ,_ 电子邮件 _ 或 raw ,则在 _ 作者之前插入另一行:_ 行。该行以“Merge:”开头,并且打印祖先提交的 sha1,用空格分隔。请注意,如果您限制了对历史记录的查看,则列出的提交可能不一定是直接父提交的列表:例如,如果您只对与某个目录或文件相关的更改感兴趣。
有几种内置格式,您可以通过设置漂亮的格式来定义其他格式。< name>将选项配置为另一种格式名称或 _ 格式:_ 字符串,如下所述(参见 git-config [1] )。以下是内置格式的详细信息:
- oneline
<sha1> <title line>
- 这是为了尽可能紧凑。
- _ 短 _
commit <sha1> Author: <author>
<title line>
- _ 中 _
commit <sha1> Author: <author> Date: <author date>
<title line>
<full commit message>
- _ 全 _
commit <sha1> Author: <author> Commit: <committer>
<title line>
<full commit message>
- _ 更丰富 _
commit <sha1> Author: <author> AuthorDate: <author date> Commit: <committer> CommitDate: <committer date>
<title line>
<full commit message>
- _ 电子邮件 _
From <sha1> <date> From: <author> Date: <author date> Subject: [PATCH] <title line>
<full commit message>
- _ 原始 _
raw 格式显示完整提交,与存储在提交对象中完全相同。值得注意的是,无论是否使用–abbrev 或–no-abbrev,SHA-1 都会完整显示,并且 _ 父 _ 信息显示真正的父提交,而不考虑移植或历史简化。请注意,此格式会影响提交的显示方式,但不会影响显示差异的方式,例如用git log --raw
。要以原始 diff 格式获取完整对象名称,请使用--no-abbrev
。 - _ 格式:< string>__ 格式:< string>_ 格式允许您指定要显示的信息。它的工作方式有点像 printf 格式,但有一个值得注意的例外,即你用 %n 而不是 \ n 获得换行符。例如,_ 格式:“%h 的作者是%an,%ar%n 标题是>>%s<<%n”_ 将显示如下内容:
The author of fe6e0ee was Junio C Hamano, 23 hours ago The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<
- 占位符是:
- %H :提交哈希
- %h :缩写提交哈希
- %T :树形哈希
- %t :缩写树哈希
- %P :父哈希
- %p :缩写为父哈希值
- _%和 _:作者姓名
- %aN :作者姓名(尊重.mailmap,见 git-shortlog [1] 或 git-blame [1] )
- %ae :作者电邮
- %aE :作者电子邮件(尊重.mailmap,见 git-shortlog [1] 或 git-blame [1] )
- %ad :作者日期(格式尊重 - 日期=选项)
- %aD :作者日期,RFC2822 风格
- %ar :作者日期,相对
- 的 _%:作者日期,UNIX 时间戳 _
- %ai :作者日期,ISO 8601 样格式
- %aI :作者日期,严格的 ISO 8601 格式
- %cn :提交者名称
- %cN :提交者名称(尊重.mailmap,见 git-shortlog [1] 或 git-blame [1] )
- %ce :提交者电子邮件
- %cE :提交者电子邮件(尊重.mailmap,参见 git-shortlog [1] 或 git-blame [1] )
- %cd :提交者日期(格式尊重 - 日期=选项)
- %cD :提交者日期,RFC2822 样式
- %cr :提交者日期,相对
- %ct :提交者日期,UNIX 时间戳
- %ci :提交者日期,类似 ISO 8601 的格式
- %cI :提交者日期,严格的 ISO 8601 格式
- %d :引用名称,如 git-log [1] 的–decorate 选项
- %D :没有“(”,“)”包装的引用名称。
- %S :在达到提交的命令行上给出的引用名称(如
git log --source
),仅适用于git log
- %e :编码
- %s :受试者
- %f :已清理的主题行,适用于文件名
- %b :身体
- %B :生体(未包裹的主体和身体)
- %N :提交备注
- %GG :来自 GPG 的签名提交的原始验证消息
- %G? :显示好的(有效)签名“G”,坏签名显示“B”,有效期未知的好签名显示“U”,已过期的好签名显示“X”,“Y”代表由过期密钥签名的好签名,“R”表示由撤销密钥签名的好签名,“E”表示签名无法检查(例如缺少密钥),“N”表示没有签名
- %GS :显示签名提交的签名者姓名
- %GK :显示用于签署签名提交的密钥
- %GF :显示用于签署签名提交的密钥的指纹
- %GP :显示主键的指纹,其子键用于签名提交的签名
- %gD :reflog 选择器,例如
refs/stash@{1}
或refs/stash@{2 minutes ago
};格式遵循-g
选项描述的规则。@
之前的部分是命令行中给出的 refname(因此git log -g refs/heads/master
将产生refs/heads/master@{0}
)。 - %gd :缩短了 reflog 选择器;与
%gD
相同,但 refname 部分缩短了人类的可读性(因此refs/heads/master
变为master
)。 - %gn :reflog 身份名称
- %gN :reflog 身份名称(尊重.mailmap,见 git-shortlog [1] 或 git-blame [1] )
- %ge :reflog 身份电子邮件
- %gE :reflog 身份邮件(尊重.mailmap,见 git-shortlog [1] 或 git-blame [1] )
- %gs :reflog 主题
- %Cred :将颜色切换为红色
- %Cgreen :将颜色切换为绿色
- %Cblue :将颜色切换为蓝色
- %Creset :重置颜色
- %C(…):颜色规格,如 git-config [1] 的“CONFIGURATION FILE”部分中的值所述。默认情况下,仅在启用日志输出时显示颜色(通过
color.diff
,color.ui
或--color
,并且如果我们要去终端,则尊重前者的auto
设置)。%C(auto,...)
被接受为默认的历史同义词(例如,%C(auto,red)
)。即使没有启用颜色,指定%C(always,...)
也会显示颜色(尽管只考虑使用--color=always
为整个输出启用颜色,包括这种格式和其他任何 git 可能颜色的颜色)。单独auto
(即%C(auto)
)将打开下一个占位符的自动着色,直到再次切换颜色。 - %m :左(
<
),右(>
)或边界(-
)标记 - %n :换行符
- %% :原始 %
- %x00 :从十六进制代码打印一个字节
- %w([< w> [,< i1> [,< i2>]]]):切换行换行,类似 git-shortlog [1]的-w 选项。
- %<(< N> [,trunc | ltrunc | mtrunc]):使下一个占位符至少取 N 列,如果需要,在右边填充空格。如果输出长于 N 列,则可以选择在开头(ltrunc),中间(mtrunc)或结尾(trunc)截断。请注意,截断仅适用于 N> = 2。
- %< |(< N>):使下一个占位符至少占用第 N 列,如果需要,在右边填充空格
- %>(< N>),%> |(< N>):与 %相似,%< |(< N>)_,但左边的填充空格 _
- %>(< N>),%> |(< N>):类似于 %>(< N>分别是 ,%> |(< N>),除非下一个占位符占用的空间多于给定的空间并且左侧有空格,请使用这些空格
- %><(< N>),%>< |(< N>):类似于 %<(< N> ),%< |(< N>),但填充两侧(即文本居中)
- %(预告片[:options]):显示 git-interpret-trailers [1] 解释的正文预告片。
trailers
字符串后面可以跟冒号和零个或多个逗号分隔选项。如果给出了only
选项,则省略拖车块中的非拖车线。如果给出unfold
选项,则表现得就像给出了 interpre-trailer 的--unfold
选项一样。例如,%(trailers:only,unfold)
两者都做。
| 注意 | 一些占位符可能依赖于修订遍历引擎的其他选项。例如,%g*
reflog 选项将插入一个空字符串,除非我们遍历 reflog 条目(例如,通过git log -g
)。如果命令行中尚未提供--decorate
,%d
和%D
占位符将使用“短”装饰格式。 |
如果在占位符的 % 之后添加+
(加号),则在扩展之前插入换行符当且仅当占位符扩展为非空字符串时。
如果在占位符的 % 之后添加-
(减号),则当且仅当占位符扩展为空字符串时,才会删除紧接在扩展之前的所有连续换行符。
如果在占位符的 % 之后添加一个“空格”,则在扩展之前插入一个空格,当且仅当占位符扩展为非空字符串时。
- tformat:
_ 格式:_ 格式与 _ 格式完全相同:_,除了它提供“终结符”语义而不是“分隔符”语义。换句话说,每个提交都附加了消息终止符(通常是换行符),而不是在条目之间放置的分隔符。这意味着单行格式的最终输入将使用新行正确终止,就像“oneline”格式一样。例如:
$ git log -2 --pretty=format:%h 4da45bef \ | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/' 4da45be 7134973 -- NO NEWLINE $ git log -2 --pretty=tformat:%h 4da45bef \ | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/' 4da45be 7134973
- 此外,其中包含
%
的任何无法识别的字符串都被解释为它前面有tformat:
。例如,这两个是等价的:
$ git log -2 --pretty=tformat:%h 4da45bef $ git log -2 --pretty=%h 4da45bef
Git 中文参考(三)(3)https://developer.aliyun.com/article/1565822