Git 中文参考(四)(4)https://developer.aliyun.com/article/1565832
漂亮的格式
如果提交是合并,并且如果漂亮格式不是 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
常见的 DIFF 选项
-p
-u
--patch
生成补丁(请参阅生成补丁的部分)。
-s
--no-patch
抑制差异输出。对于git show
等默认显示补丁的命令,或取消--patch
的效果很有用。
-U<n>
--unified=<n>
用< n>生成差异。上下文而不是通常的三行。意味着-p
。
--raw
对于每个提交,使用原始 diff 格式显示更改摘要。请参阅 git-diff [1] 的“RAW OUTPUT FORMAT”部分。这与以原始格式显示日志本身不同,您可以使用--format=raw
来实现。
--patch-with-raw
-p --raw
的同义词。
--indent-heuristic
启用改变差异块边界的启发式以使补丁更易于阅读。这是默认值。
--no-indent-heuristic
禁用缩进启发式。
--minimal
花些额外的时间来确保产生尽可能小的差异。
--patience
使用“耐心差异”算法生成差异。
--histogram
使用“histogram diff”算法生成 diff。
--anchored=<text>
使用“锚定差异”算法生成差异。
可以多次指定此选项。
如果源和目标中都存在一行,只存在一次,并以此文本开头,则此算法会尝试阻止它在输出中显示为删除或添加。它在内部使用“耐心差异”算法。
--diff-algorithm={patience|minimal|histogram|myers}
选择差异算法。变体如下:
default, myers
基本的贪心差异算法。目前,这是默认值。
minimal
花些额外的时间来确保产生尽可能小的差异。
patience
生成补丁时使用“耐心差异”算法。
histogram
该算法将耐心算法扩展为“支持低发生的共同元素”。
例如,如果将diff.algorithm
变量配置为非默认值并想要使用默认值,则必须使用--diff-algorithm=default
选项。
--stat[=<width>[,<name-width>[,<count>]]]
生成 diffstat。默认情况下,文件名部分将使用必要的空间,图形部分的其余部分将使用。最大宽度默认为终端宽度,如果未连接到终端,则为 80 列,并且可以被<width>
覆盖。可以通过在逗号后面给出另一个宽度<name-width>
来限制文件名部分的宽度。可以使用--stat-graph-width=<width>
(影响生成统计图的所有命令)或设置diff.statGraphWidth=<width>
(不影响git format-patch
)来限制图形部分的宽度。通过给出第三个参数<count>
,可以将输出限制为第一个<count>
行,如果有更多,则可以将...
限制为...
。
也可以使用--stat-width=<width>
,--stat-name-width=<name-width>
和--stat-count=<count>
单独设置这些参数。
--compact-summary
输出扩展标题信息的精简摘要,例如文件创建或删除(“新”或“消失”,如果是符号链接,则可选“+ l”)和模式更改(“+ x”或“-x”用于添加或删除 diffstat 中的可执行位)。信息放在文件名部分和图形部分之间。意味着--stat
。
--numstat
与--stat
类似,但显示十进制表示法中添加和删除的行数以及没有缩写的路径名,以使其更加机器友好。对于二进制文件,输出两个-
而不是0 0
。
--shortstat
仅输出--stat
格式的最后一行,其中包含已修改文件的总数,以及已添加和已删除行的数量。
--dirstat[=<param1,param2,…>]
输出每个子目录的相对更改量的分布。 --dirstat
的行为可以通过以逗号分隔的参数列表传递来定制。默认值由diff.dirstat
配置变量控制(参见 git-config [1] )。可以使用以下参数:
changes
通过计算已从源中删除或添加到目标的行来计算 dirstat 数。这忽略了文件中纯代码移动的数量。换句话说,重新排列文件中的行不会像其他更改那样计算。这是没有给出参数时的默认行为。
lines
通过执行常规的基于行的差异分析来计算 dirstat 数字,并对移除/添加的行数进行求和。 (对于二进制文件,计算 64 字节块,因为二进制文件没有自然的线条概念)。这是比changes
行为更昂贵的--dirstat
行为,但它确实计算文件中重新排列的行与其他更改一样多。结果输出与您从其他--*stat
选项获得的输出一致。
files
通过计算更改的文件数来计算 dirstat 数。在 dirstat 分析中,每个更改的文件都相同。这是计算上最便宜的--dirstat
行为,因为它根本不需要查看文件内容。
cumulative
计算父目录的子目录中的更改。请注意,使用cumulative
时,报告的百分比总和可能超过 100%。可以使用noncumulative
参数指定默认(非累积)行为。
<limit>
整数参数指定截止百分比(默认为 3%)。贡献低于此百分比变化的目录不会显示在输出中。
示例:以下将计算已更改的文件,同时忽略少于已更改文件总量的 10%的目录,并在父目录中累计子目录计数:--dirstat=files,10,cumulative
。
--summary
输出扩展标题信息的精简摘要,例如创建,重命名和模式更改。
--patch-with-stat
-p --stat
的同义词。
-z
将提交与 NUL 分开,而不是使用新换行符。
此外,当给出--raw
或--numstat
时,不要使用路径名并使用 NUL 作为输出字段终止符。
如果没有此选项,则会引用具有“异常”字符的路径名,如配置变量core.quotePath
所述(参见 git-config [1] )。
--name-only
仅显示已更改文件的名称。
--name-status
仅显示已更改文件的名称和状态。有关状态字母的含义,请参阅--diff-filter
选项的说明。
--submodule[=<format>]
指定子模块的差异如何显示。指定--submodule=short
时,使用 _ 短 _ 格式。此格式仅显示范围开头和结尾的提交名称。指定--submodule
或--submodule=log
时,使用 log 格式。此格式列出 git-submodule [1] summary
等范围内的提交。指定--submodule=diff
时,使用 diff 格式。此格式显示提交范围之间子模块内容更改的内联差异。如果未设置配置选项,则默认为diff.submodule
或 _ 短 _ 格式。
--color[=<when>]
显示彩色差异。 --color
(即没有 =<当> )与--color=always
相同时。 < when> 可以是always
,never
或auto
之一。
--no-color
关掉彩色差异。它与--color=never
相同。
--color-moved[=<mode>]
移动的代码行的颜色不同。 <模式>如果没有给出选项,默认为 no ,如果给出没有模式的选项,则默认为 zebra 。模式必须是以下之一:
no
移动的线条不会突出显示。
default
是zebra
的同义词。这可能会在未来转变为更明智的模式。
plain
在一个位置添加并在另一个位置删除的任何行都将使用 color.diff.newMoved 进行着色。类似地, color.diff.oldMoved 将用于在 diff 中的其他位置添加的已删除行。此模式选择任何已移动的行,但在检查中确定是否在没有置换的情况下移动了代码块时,它不是很有用。
blocks
贪婪地检测至少 20 个字母数字字符的移动文本块。使用 color.diff。{old,new} Moved 颜色绘制检测到的块。相邻的街区不能分开。
zebra
在 _ 块 _ 模式中检测移动文本块。使用 color.diff。{old,new} Moved 颜色或 color.diff。{old,new} MovedAlternative 绘制块。两种颜色之间的变化表示检测到新的块。
dimmed-zebra
与 zebra 类似,但执行了移动代码的无趣部分的额外调暗。两个相邻街区的边界线被认为是有趣的,其余的是无趣的。 dimmed_zebra
是不推荐使用的同义词。
--no-color-moved
关闭移动检测。这可用于覆盖配置设置。它与--color-moved=no
相同。
--color-moved-ws=<modes>
这将配置在执行--color-moved
的移动检测时如何忽略空白。这些模式可以以逗号分隔的列表给出:
no
执行移动检测时不要忽略空格。
ignore-space-at-eol
忽略 EOL 中的空白更改。
ignore-space-change
忽略空格量的变化。这会忽略行尾的空格,并将一个或多个空白字符的所有其他序列视为等效。
ignore-all-space
比较线条时忽略空格。即使一行有空格而另一行没有空格,这也会忽略差异。
allow-indentation-change
最初忽略移动检测中的任何空格,然后如果每行的空白变化相同,则仅将移动的代码块分组到块中。这与其他模式不兼容。
--no-color-moved-ws
执行移动检测时不要忽略空格。这可用于覆盖配置设置。它与--color-moved-ws=no
相同。
--word-diff[=<mode>]
使用< mode>显示单词 diff。划定改变的单词。默认情况下,单词由空格分隔;见下面的--word-diff-regex
。 <模式>默认为 plain ,必须是以下之一:
color
仅使用颜色突出显示更改的单词。意味着--color
。
plain
将单词显示为[-removed-]
和{+added+}
。如果它们出现在输入中,则不会尝试转义分隔符,因此输出可能不明确。
porcelain
使用特殊的基于行的格式用于脚本使用。添加/删除/未更改的运行以通常的统一 diff 格式打印,从行开头的+
/ -
/``字符开始并延伸到行尾。输入中的换行符由其自身行上的波浪号~
表示。
none
再次禁用字差异。
请注意,尽管第一个模式的名称,但如果启用了颜色,则使用颜色突出显示所有模式中已更改的部分。
--word-diff-regex=<regex>
使用< regex>决定一个单词是什么,而不是将非空格的运行视为一个单词。除非已经启用,否则还暗示--word-diff
。
< regex>的每个非重叠匹配被认为是一个词。这些匹配之间的任何内容都被视为空格并被忽略(!)以查找差异。您可能希望将|[^[:space:]]
附加到正则表达式,以确保它匹配所有非空白字符。包含换行符的匹配项会在换行符处以静默方式截断(!)。
例如,--word-diff-regex=.
会将每个字符视为一个单词,并相应地逐个字符地显示差异。
正则表达式也可以通过 diff 驱动程序或配置选项设置,参见 gitattributes [5] 或 git-config [1] 。明确地覆盖任何差异驱动程序或配置设置。 Diff 驱动程序覆盖配置设置。
--color-words[=<regex>]
相当于--word-diff=color
加(如果指定了正则表达式)--word-diff-regex=<regex>
。
--no-renames
关闭重命名检测,即使配置文件提供默认值也是如此。
--check
如果更改引入冲突标记或空白错误,则发出警告。什么被认为是空白错误由core.whitespace
配置控制。默认情况下,尾随空格(包括仅由空格组成的行)和在行的初始缩进内紧跟着制表符的空格字符被视为空格错误。如果发现问题,则退出非零状态。与–exit-code 不兼容。
--ws-error-highlight=<kind>
突出显示差异的context
,old
或new
行中的空白错误。多个值用逗号分隔,none
重置先前的值,default
将列表重置为new
,all
是old,new,context
的简写。如果未指定此选项,并且未设置配置变量diff.wsErrorHighlight
,则仅突出显示new
行中的空白错误。空白错误用color.diff.whitespace
着色。
--full-index
在生成补丁格式输出时,在“索引”行上显示完整的前映像和后映像 blob 对象名称,而不是第一个字符。
--binary
除--full-index
外,还可输出可用git-apply
应用的二进制差异。
--abbrev[=<n>]
而不是在 diff-raw 格式输出和 diff-tree 标题行中显示完整的 40 字节十六进制对象名称,而是仅显示部分前缀。这与上面的--full-index
选项无关,后者控制 diff-patch 输出格式。可以使用--abbrev=<n>
指定非默认位数。
-B[<n>][/<m>]
--break-rewrites[=[<n>][/<m>]]
将完整的重写更改分为删除和创建对。这有两个目的:
它影响了一个更改的方式,相当于一个文件的完全重写,而不是一系列的删除和插入混合在一起,只有几行恰好与文本作为上下文匹配,而是作为单个删除所有旧的后跟一个单个插入所有新内容,数字m
控制-B 选项的这一方面(默认为 60%)。 -B/70%
指定少于 30%的原始文本应保留在结果中,以便 Git 将其视为完全重写(即,否则生成的修补程序将是一系列删除和插入与上下文行混合在一起)。
当与-M 一起使用时,完全重写的文件也被视为重命名的源(通常-M 只考虑作为重命名源消失的文件),并且数字n
控制 - 的这方面 - B 选项(默认为 50%)。 -B20%
指定添加和删除的更改与文件大小的 20%或更多相比,有资格被选为可能的重命名源到另一个文件。
-M[<n>]
--find-renames[=<n>]
如果生成差异,则检测并报告每次提交的重命名。对于遍历历史记录时重命名后续文件,请参阅--follow
。如果指定了n
,则它是相似性指数的阈值(即与文件大小相比的添加/删除量)。例如,-M90%
表示如果超过 90%的文件未更改,Git 应将删除/添加对视为重命名。如果没有%
符号,则该数字将作为分数读取,并在其前面加上小数点。即,-M5
变为 0.5,因此与-M50%
相同。同样,-M05
与-M5%
相同。要将检测限制为精确重命名,请使用-M100%
。默认相似性指数为 50%。
-C[<n>]
--find-copies[=<n>]
检测副本以及重命名。另见--find-copies-harder
。如果指定了n
,则其含义与-M<n>
的含义相同。
--find-copies-harder
出于性能原因,默认情况下,仅当在同一变更集中修改了副本的原始文件时,-C
选项才会查找副本。此标志使命令检查未修改的文件作为副本源的候选者。对于大型项目来说,这是一项非常昂贵的操作,因此请谨慎使用。提供多个-C
选项具有相同的效果。
-D
--irreversible-delete
省略删除的原像,即只打印标题而不打印原像和/dev/null
之间的差异。得到的贴片不适用于patch
或git apply
;这仅适用于那些希望在更改后专注于审阅文本的人。此外,输出显然缺乏足够的信息来反向应用这样的补丁,甚至手动,因此选项的名称。
与-B
一起使用时,也省略删除/创建对的删除部分中的原像。
-l<num>
-M
和-C
选项需要 O(n ^ 2)处理时间,其中 n 是潜在的重命名/复制目标的数量。如果重命名/复制目标的数量超过指定的数量,此选项可防止重命名/复制检测运行。
--diff-filter=[(A|C|D|M|R|T|U|X|B)…[*]]
仅选择已添加(A
),复制(C
),已删除(D
),已修改(M
),已重命名(R
)的文件,其类型(即常规文件,符号链接,子模块,…)更改(T
),未合并(U
),未知(X
),或已配对破碎(B
)。可以使用过滤器字符的任何组合(包括无)。当*
(全部或全部)添加到组合中时,如果有任何文件与比较中的其他条件匹配,则选择所有路径;如果没有与其他条件匹配的文件,则不会选择任何内容。
此外,这些大写字母可以降级为排除。例如。 --diff-filter=ad
排除添加和删除的路径。
请注意,并非所有差异都可以包含所有类型。例如,从索引到工作树的差异永远不会有添加条目(因为差异中包含的路径集受限于索引中的内容)。同样,如果禁用了对这些类型的检测,则无法显示复制和重命名的条目。
-S<string>
查找改变文件中指定字符串出现次数(即添加/删除)的差异。用于脚本编写者的使用。
Git 中文参考(四)(6)https://developer.aliyun.com/article/1565834