uTools-Manuals/docs/git/git diff-tree.html
2019-04-08 23:22:26 +08:00

16 lines
82 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="c-markdown doc-markdown"><div class="doc-postil"><div class="c-markdown"><h2>名称Name</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>git-diff-tree  - 比较通过两个树对象找到的 blob 的内容和模式</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>概要</h2></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">git diff-tree [--stdin] [-m] [-s] [-v] [--no-commit-id] [--pretty]              [-t] [-r] [-c | --cc] [--root] [&lt;common diff options&gt;]              &lt;tree-ish&gt; [&lt;tree-ish&gt;] [&lt;path&gt;…]</pre></div></div><div class="doc-postil"><div class="c-markdown"><h2>描述</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>比较通过两个树对象找到的斑点的内容和模式。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>如果只给出一个&lt;tree-ish&gt;,则将提交与其父项进行比较(请参阅下面的--stdin</p></div></div><div class="doc-postil"><div class="c-markdown"><p>请注意,<code>git diff-tree</code>可以使用封装在提交对象中的树。</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>选项</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>-p   -u   --patch</p></div></div><div class="doc-postil"><div class="c-markdown"><p>生成补丁(请参阅生成补丁一节)。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-s   --no-patch</p></div></div><div class="doc-postil"><div class="c-markdown"><p>抑制差异输出。对于像<code>git show</code>这样的命令很有用,默认显示补丁,或者取消效果<code>--patch</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>-U&lt;n&gt;   --unified=&lt;n&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>使用&lt;n&gt;行上下文生成差异,而不是通常的三行。意味着<code>-p</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>--raw</p></div></div><div class="doc-postil"><div class="c-markdown"><p>以原始格式生成差异。这是默认设置。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--patch-with-raw</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>-p --raw</code>的同义词。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--indent-heuristic   --no-indent-heuristic</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这些是为了帮助调试和调整实验启发式(默认情况下是关闭的),这些启发式技术改变了差异边界以使修补程序更易于阅读。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--minimal</p></div></div><div class="doc-postil"><div class="c-markdown"><p>花费额外的时间来确保生成最小可能的差异。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--patience</p></div></div><div class="doc-postil"><div class="c-markdown"><p>使用“耐心差异”算法生成差异。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--histogram</p></div></div><div class="doc-postil"><div class="c-markdown"><p>使用“直方图差异”算法生成差异。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--diff-algorithm={patience|minimal|histogram|myers}</p></div></div><div class="doc-postil"><div class="c-markdown"><p>选择一种差异算法。变体如下:</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>default</code>, <code>myers</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>基本的贪婪 diff 算法。目前,这是默认设置。</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>minimal</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>花费额外的时间来确保生成最小可能的差异。</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>patience</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>生成补丁时使用“耐心差异”算法。</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>histogram</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>此算法将耐心算法扩展为“支持低出现率的通用元素”。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>例如,如果您将 diff.algorithm 变量配置为非默认值并且想要使用默认值,那么您必须使用<code>--diff-algorithm=default</code>选项。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--stat[=&lt;width&gt;[,&lt;name-width&gt;,&lt;count&gt;]]</p></div></div><div class="doc-postil"><div class="c-markdown"><p>生成一个 diffstat。默认情况下文件名部分使用尽可能多的空间其余部分使用图形部分。最大宽度默认为终端宽度如果未连接到终端则最大宽度为80列并且可以被覆盖<code>&lt;width&gt;</code>。文件名部分的宽度可以通过<code>&lt;name-width&gt;</code>逗号后面的另一个宽度来限制。图形部分的宽度可以通过使用<code>--stat-graph-width=&lt;width&gt;</code>(影响所有生成统计图的命令)或通过设置<code>diff.statGraphWidth=&lt;width&gt;</code>(不影响<code>git format-patch</code>)来限制。通过给出第三个参数<code>&lt;count&gt;</code>,可以将输出限制在第一<code>&lt;count&gt;</code>行,<code>...</code>如果还有更多的话。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这些参数也可以单独设置<code>--stat-width=&lt;width&gt;</code><code>--stat-name-width=&lt;name-width&gt;</code><code>--stat-count=&lt;count&gt;</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>--numstat</p></div></div><div class="doc-postil"><div class="c-markdown"><p>类似于<code>--stat</code>,但显示十进制表示法中添加和删除的行数以及不带缩写的路径名,以使其更加机器友好。对于二进制文件,输出两个<code>-</code>而不是说<code>0 0</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>--shortstat</p></div></div><div class="doc-postil"><div class="c-markdown"><p>只输出<code>--stat</code>包含修改文件总数的格式的最后一行,以及添加和删除行的数量。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--dirstat=&lt;param1,param2,…&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>输出每个子目录的相对变化量分布。<code>--dirstat</code>可以通过传递逗号分隔的参数列表来定制行为。默认值由<code>diff.dirstat</code>配置变量控制(请参阅 git-config [1])。以下参数可用:</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>changes</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>通过计算已从源中删除或添加到目标的行来计算 dirstat 数字。这会忽略文件中纯代码移动的数量。换句话说,重新排列文件中的行数不会与其他更改一样多。这是没有给出参数时的默认行为。</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>lines</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>通过执行常规基于行的差异分析来计算 dirstat 数字,并将删除/添加的行数相加。对于二进制文件取而代之的是计算64字节的块因为二进制文件没有自然的行概念。这是一种<code>--dirstat</code><code>changes</code>行为更为昂贵的行为,但它可以像其他更改一样计算文件中重新排列的行数。结果输出与您从其他<code>--*stat</code>选项中获得的结果一致。</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>files</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>通过计算更改的文件数量来计算 dirstat 数字。dirstat 分析中每个更改的文件都相同。这是计算上最便宜的<code>--dirstat</code>行为,因为它不必查看文件内容。</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>cumulative</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>计数父目录的子目录中的更改。请注意,使用时<code>cumulative</code>报告的百分比总和可能超过100。默认非累积行为可以用<code>noncumulative</code>参数指定。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>&lt;limit&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>整数参数指定截断百分比默认为3。输出中不显示贡献小于此百分比的目录。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>示例以下内容将计数已更改的文件同时忽略占已更改文件总数少于10的目录并累积父目录中的子目录计数<code>--dirstat=files,10,cumulative</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>--summary</p></div></div><div class="doc-postil"><div class="c-markdown"><p>输出扩展头信息的精简摘要,如创建,重命名和模式更改。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--patch-with-stat</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>-p --stat</code>的同义词。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-z</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>--raw</code><code>--numstat</code><code>--name-only</code><code>--name-status</code>已给出不Munge时间路径名并使用完全无效的输出字段终止符。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>如果没有这个选项,带有“不寻常”字符的路径名将按照配置变量的说明引用<code>core.quotePath</code>(请参阅 git-config [1])。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--name-only</p></div></div><div class="doc-postil"><div class="c-markdown"><p>仅显示已更改文件的名称。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--name-status</p></div></div><div class="doc-postil"><div class="c-markdown"><p>仅显示已更改文件的名称和状态。有关<code>--diff-filter</code>状态字母的含义,请参阅选项说明。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--submodule=&lt;format&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>指定如何显示子模块中的差异。指定使用<code>--submodule=short</code><code>short</code>格式时。这种格式只显示范围开始和结束处的提交名称。当<code>--submodule</code>或者<code>--submodule=log</code>被指定时,使用<code>log</code>格式。这种格式列出了像 git-submodule [1] <code>summary</code>那样的提交。当<code>--submodule=diff</code>指定时,使用<code>diff</code>格式。这种格式显示了提交范围内子模块内容变化的内嵌比较。如果配置选项未设置,则默认为<code>diff.submodule</code><code>short</code>格式。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--color=&lt;when&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示有色差异。<code>--color</code>(即没有<code>=&lt;when&gt;</code>)是一样的<code>--color=always</code><code>&lt;when&gt;</code>可以是一个<code>always</code><code>never</code><code>auto</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>--no-color</p></div></div><div class="doc-postil"><div class="c-markdown"><p>关闭有色差异。它和<code>--color=never</code>。一样。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--word-diff=&lt;mode&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示一个单词 diff使用&lt;mode&gt;分隔已更改的单词。默认情况下,单词由空格分隔; 见<code>--word-diff-regex</code>下文。&lt;mode&gt;默认为<code>plain</code>,并且必须是以下之一:</p></div></div><div class="doc-postil"><div class="c-markdown"><p>color</p></div></div><div class="doc-postil"><div class="c-markdown"><p>仅使用颜色突出显示更改的词。意味着<code>--color</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>川( plain </p></div></div><div class="doc-postil"><div class="c-markdown"><p>将单词显示为<code>[-removed-]</code><code>{+added+}</code>。如果输入中出现分隔符,则不会尝试跳过分隔符,因此输出可能不明确。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>porcelain</p></div></div><div class="doc-postil"><div class="c-markdown"><p>使用专门用于脚本消费的基于行的格式。以通常的统一差异格式打印已添加/已删除/未更改的运行,以行开头处的<code>+</code>/ <code>-</code>/字符开始并延伸至行尾。输入中<code>~</code>的换行符通过它自己的一行代字符表示。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>none</p></div></div><div class="doc-postil"><div class="c-markdown"><p>再次禁用字差异。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>请注意,尽管第一个模式的名称,如果启用,颜色将用于突出显示所有模式中更改的部分。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--word-diff-regex=&lt;regex&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>使用&lt;regex&gt;来决定一个单词是什么,而不是将非空白的运行视为一个单词。也意味着<code>--word-diff</code>除非已经启用。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>每个&lt;regex&gt;的非重叠匹配都被视为一个单词。为了找到差异,这些匹配之间的任何内容都被认为是空白并被忽略(!)。你可能想追<code>|[^[:space:]]</code>加到你的正则表达式,以确保它匹配所有非空白字符。包含换行符的匹配在换行符处被无提地截断(!)。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>例如,<code>--word-diff-regex=.</code>将每个字符看作单词,并相应地逐个字符地显示差异。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>正则表达式也可以通过 diff 驱动程序或配置选项来设置,请参阅 gitattributes [5]或 git-config [1]。显式给予它将覆盖任何 diff 驱动程序或配置设置。差异驱动程序覆盖配置设置</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--color-words=&lt;regex&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>相当于<code>--word-diff=color</code>加号(如果指定了正则表达式)<code>--word-diff-regex=&lt;regex&gt;</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>--no-renames</p></div></div><div class="doc-postil"><div class="c-markdown"><p>关闭重命名检测,即使配置文件提供了默认设置。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--check</p></div></div><div class="doc-postil"><div class="c-markdown"><p>警告如果更改引入冲突标记或空白错误。认为空白错误由<code>core.whitespace</code>配置控制。默认情况下,尾随空格(包括单独由空格组成的行)和空格字符(紧跟该行的初始缩进内的制表符后面的空格字符)将被视为空白错误。如果发现问题,则退出非零状态。与--exit-code不兼容。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--ws-error-highlight=&lt;kind&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>突出显示空白的错误<code>context</code><code>old</code>或者<code>new</code>把差异线。多个值以逗号分隔,<code>none</code>重置以前的值,<code>default</code>将列表重置为<code>new</code><code>all</code>简写为<code>old,new,context</code>。如果未给出此选项,并且<code>diff.wsErrorHighlight</code>未设置配置变量,则只会<code>new</code>突出显示行中的空白错误。空白错误是彩色的<code>color.diff.whitespace</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>--full-index</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在生成补丁格式输出时在“索引”行上显示完整的映像前和映像后blob对象名称而不是第一批字符。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--binary</p></div></div><div class="doc-postil"><div class="c-markdown"><p>除了<code>--full-index</code>输出可以应用的二进制差异<code>git-apply</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>--abbrev=&lt;n&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>不是在 diff-raw 格式输出和 diff-tree 标题行中显示完整的40字节十六进制对象名称只显示部分前缀。这与<code>--full-index</code>上面的选项无关,后者控制 diff-patch 输出格式。非默认的位数可以用指定<code>--abbrev=&lt;n&gt;</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>-B&lt;n&gt;   --break-rewrites[=&lt;n&gt;]</p></div></div><div class="doc-postil"><div class="c-markdown"><p>将完全重写更改分解为删除和创建对。这有两个目的:</p></div></div><div class="doc-postil"><div class="c-markdown"><p>它影响到一种改变的方式,这种改变相当于整个文件的重写,而不是像一系列删除和插入混合在一起,只有几行文本与上下文相匹配,但是作为一个单一的删除旧的一切,随后是一个单次插入所有新事物,并且数字<code>m</code>控制-B选项的这个方面默认为60<code>-B/70%</code>指定只有少于30的原始数据应保留在Git的结果中以便将其视为全部重写否则结果补丁将是一系列与上下文行混合的删除和插入</p></div></div><div class="doc-postil"><div class="c-markdown"><p>与-M 一起使用时,完全重写的文件也被认为是重命名的来源(通常-M 仅考虑作为重命名源消失的文件),并且该数字<code>n</code>控制着-B选项的这个方面默认为50<code>-B20%</code>指定添加和删除相对于文件大小的20或更多的更改有资格作为重命名为其他文件的可能来源。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-M&lt;n&gt;   --find-renames=&lt;n&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>检测重命名。如果<code>n</code>被指定,则它是相似度指数的阈值(即与文件大小相比的添加/删除量)。例如,<code>-M90%</code>如果超过90的文件没有改变Git 应该考虑删除/添加对是一个重命名。如果没有<code>%</code>符号,该数字应作为分数读取,并在其前面加小数点。即,<code>-M5</code>变成0.5,并且因此是相同的<code>-M50%</code>。同样的,<code>-M05</code>也是一样的<code>-M5%</code>。要将检测限制为精确重命名,请使用<code>-M100%</code>。默认相似度指数为50</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-C&lt;n&gt;   --find-copies=&lt;n&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>检测副本以及重命名。另见<code>--find-copies-harder</code>。如果<code>n</code>被指定,它的含义与<code>-M&lt;n&gt;</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>--find-copies-harder</p></div></div><div class="doc-postil"><div class="c-markdown"><p>出于性能原因,默认情况下,<code>-C</code>只有当副本的原始文件在相同的变更集中被修改时,选项才会查找副本。该标志使命令检查未修改的文件作为复制源的候选项。对于大型项目来说这是一项非常昂贵的操作,因此请谨慎使用。给予多个<code>-C</code>选项具有相同的效果。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-D   --irreversible-delete</p></div></div><div class="doc-postil"><div class="c-markdown"><p>省略原图像进行删除,即仅打印标题,但不打印原像和之间的差异<code>/dev/null</code>。由此产生的补丁不适用于<code>patch</code><code>git apply</code>; 这仅适用于那些想专注于更改后查看文本的人。另外,输出显然缺乏足够的信息来反向应用这样的补丁,甚至是手动的,因此也就是选项的名称。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在与<code>-B</code>删除/创建对的删除部分一起使用时,还要省略原像。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-l&lt;num&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>-M</code><code>-C</code>选项需要为 On ^ 2的处理时间其中n是/复制目标潜在的重命名的数目。如果重命名/复制目标的数量超过指定的数量,则此选项可防止重命名/复制检测运行。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--diff-filter=[(A|C|D|M|R|T|U|X|B)…*]</p></div></div><div class="doc-postil"><div class="c-markdown"><p>选择仅添加(<code>A</code>),复制(<code>C</code>),删除(<code>D</code>),修改(<code>M</code>),重命名(<code>R</code>),其类型(即常规文件,符号链接,子模块,...)更改(<code>T</code>Unmerged<code>U</code>),未知(<code>X</code>或已配对Broken<code>B</code>)。可以使用任何过滤字符的组合(包括无)。当<code>*</code>(全部或无)添加到组合中时,如果有任何文件与比较中的其他条件匹配,则选择所有路径; 如果没有与其他标准匹配的文件,则不会选择任何内容。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>此外,这些大写字母可以降低排除。例如<code>--diff-filter=ad</code>排除添加和删除的路径。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-S&lt;string&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>查找改变文件中指定字符串出现次数(即添加/删除)的差异。旨在供剧本使用。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>当你寻找一个精确的代码块(比如一个结构体)并且想知道该块自第一次出现以来的历史记录时,它非常有用:迭代地使用该特征将原始图像中的有趣块返回到<code>-S</code>,并继续前进,直到获得该块的第一个版本。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-G&lt;regex&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>寻找补丁文本包含与&lt;regex&gt;匹配的添加/删除行的差异。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>为了说明之间的区别<code>-S&lt;regex&gt; --pickaxe-regex</code>,并<code>-G&lt;regex&gt;</code>考虑在同一个文件中的以下DIFF提交</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">+    return !regexec(regexp, two-&gt;ptr, 1, &amp;regmatch, 0);...-    hit = !regexec(regexp, mf2.ptr, 1, &amp;regmatch, 0);</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>虽然<code>git log -G"regexec\(regexp"</code>会显示此提交,但<code>git log -S"regexec\(regexp" --pickaxe-regex</code>不会(因为该字符串的出现次数没有改变)。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>有关<code>pickaxe</code>更多信息,请参阅 gitdiffcore [7]中的条目。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--pickaxe-all</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>-S</code><code>-G</code>发现更改时,显示该更改集中的所有更改,而不仅仅是包含&lt;string&gt;中的更改的文件。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--pickaxe-regex</p></div></div><div class="doc-postil"><div class="c-markdown"><p>将给定的&lt;string&gt; <code>-S</code>视为扩展的 POSIX 正则表达式进行匹配。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-O&lt;orderfile&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>控制文件在输出中出现的顺序。这覆盖了<code>diff.orderFile</code>配置变量(请参阅 git-config [1])。取消<code>diff.orderFile</code>,使用<code>-O/dev/null</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>输出顺序由&lt;orderfile&gt;中的全局模式顺序决定。所有具有与第一个模式相匹配的路径名的文件将首先输出,接下来将输出所有具有匹配第二个模式(但不是第一个)的路径名的文件,依此类推。最后输出所有不匹配任何模式的路径名的文件,就好像文件末尾有一个隐含的匹配模式一样。如果多个路径名具有相同的排名(它们匹配相同的模式但没有更早的模式),则它们的输出顺序相对于彼此是正常顺序。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>按以下方式解析&lt;orderfile&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>空白行被忽略,所以它们可以用作分隔符以提高可读性。</p></li><li><p>以散列(“ <code>#</code>”)开头的行会被忽略,因此它们可以用于注释。<code>\</code>如果以散列开头,则在模式的开头添加反斜杠(“ ”)。</p></li><li><p>每隔一行包含一个模式。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>模式与没有 FNM_PATHNAME 标志的 fnmantch3使用的模式具有相同的语法和语义但如果删除任何数量的最终路径名组件都与模式匹配则路径名也与模式匹配。例如模式“ <code>foo*bar</code>”匹配“ <code>fooasdfbar</code>”和“ <code>foo/bar/baz/asdf</code>”但不是“ <code>foobarx</code>”。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-R</p></div></div><div class="doc-postil"><div class="c-markdown"><p>交换两个输入; 即显示索引或磁盘文件与树内容的差异。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--relative=&lt;path&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>从项目的子目录运行时,可以通过此选项告知排除目录外的更改并显示与其相关的路径名。如果不在子目录中(例如,在裸存储库中),可以通过给出&lt;path&gt;作为参数来命名将哪个子目录作为输出的相对位置。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-a   --text</p></div></div><div class="doc-postil"><div class="c-markdown"><p>将所有文件视为文本。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--ignore-space-at-eol</p></div></div><div class="doc-postil"><div class="c-markdown"><p>忽略 EOL 中的空白变化。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-b   --ignore-space-change</p></div></div><div class="doc-postil"><div class="c-markdown"><p>忽略空白量的变化。这会忽略行结束处的空白,并认为一个或多个空白字符的所有其他序列是等价的。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-w   --ignore-all-space</p></div></div><div class="doc-postil"><div class="c-markdown"><p>比较行时忽略空格。即使一行有空白,而另一行没有空白,这也会忽略差异。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--ignore-blank-lines</p></div></div><div class="doc-postil"><div class="c-markdown"><p>忽略其行全部空白的更改。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--inter-hunk-context=&lt;lines&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示差异 hunk 之间的上下文,直到指定的行数,从而融合彼此接近的 hunk。<code>diff.interHunkContext</code>如果配置选项未设置则默认为0或0。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-W   --function-context</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示整个周围的变化功能。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--exit-code</p></div></div><div class="doc-postil"><div class="c-markdown"><p>用类似于 diff1的代码退出程序。也就是说如果存在差异则1退出0表示没有差异。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--quiet</p></div></div><div class="doc-postil"><div class="c-markdown"><p>禁用程序的所有输出。意味着<code>--exit-code</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>--ext-diff</p></div></div><div class="doc-postil"><div class="c-markdown"><p>允许执行一个外部比较助手。如果你用 gitattributes [5]设置外部差异驱动程序,你需要在 git-log [1]和朋友中使用这个选项。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--no-ext-diff</p></div></div><div class="doc-postil"><div class="c-markdown"><p>禁止外部差异驱动程序。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--textconv   --no-textconv</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在比较二进制文件时,允许(或不允许)运行外部文本转换过滤器。有关详细信息,请参阅 gitattributes [5]。由于 textconv 过滤器通常是单向转换因此生成的差异适合人类消费但无法应用。出于这个原因默认情况下textconv 过滤器仅针对 git-diff [1]和 git-log [1]启用,但不适用于 git-format-patch [1]或 diff plumbing命令。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--ignore-submodules=&lt;when&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>忽略差异代中子模块的更改。&lt;when&gt;可以是“none”“untracked”“dirty”或“all”这是默认设置。如果子模块包含未跟踪或已修改的文件或者HEAD与超级项目中记录的提交不同并且可用于覆盖<code>ignore</code>git-config [1]或gitmodules [5]中的任何选项设置则使用“none” ]。当使用“未跟踪”时如果子模块仅包含未跟踪内容但仍然针对修改内容进行扫描则子模块不会被视为脏。使用“dirty”会忽略对子模块工作树的所有更改只会显示超级项目中存储的提交更改这是1.7.0之前的行为)。使用“全部”</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--src-prefix=&lt;prefix&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示给定的源前缀而不是“a /”。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--dst-prefix=&lt;prefix&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示给定的目的地前缀而不是“b /”。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--no-prefix</p></div></div><div class="doc-postil"><div class="c-markdown"><p>不要显示任何来源或目的地前缀。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--line-prefix=&lt;prefix&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>为每行输出预留一个额外的前缀。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--ita-invisible-in-index</p></div></div><div class="doc-postil"><div class="c-markdown"><p>默认情况下由“git add -N”添加的条目显示为“git diff”中的现有空文件和“git diff --cached”中的新文件。该选项使得该条目在“git diff”中显示为新文件而在“git diff --cached”中不存在。这个选项可以恢复<code>--ita-visible-in-index</code>。这两个选项都是实验性的,可以在将来删除。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>有关这些常用选项的更详细的解释,请参阅 gitdiffcore [7]。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>&lt;tree-ish&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>树对象的 ID。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>&lt;path&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>如果提供,结果仅限于匹配其中一个前缀字符串的文件子集。即文件匹配<code>/^&lt;pattern1&gt;|&lt;pattern2&gt;|.../</code>请注意,此参数不提供任何通配符或正则表达式功能。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-r</p></div></div><div class="doc-postil"><div class="c-markdown"><p>递归到子树中</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-t</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示树本身以及子树。意味着-r。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--root</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>--root</code>指定时,初始提交将显示为一个大的创建事件。这相当于针对 NULL 树的 diff。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--stdin</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>--stdin</code>指定时,该命令不会从命令行获取&lt;tree-ish&gt;参数。而是从它的标准输入中读取包含两个&lt;tree&gt;,一个&lt;commit&gt;&lt;commit&gt;列表的行。(使用一个空格作为分隔符。)</p></div></div><div class="doc-postil"><div class="c-markdown"><p>当给出两棵树时,它比较第一棵树和第二棵树。当提交一次提交时,它将提交与其父项进行比较。其余的提交,如果给出,就好像它们是第一次提交的父项一样。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在比较两棵树时,两个树的 ID用空格分隔并以换行符终止在差异之前打印。比较提交时会打印第一个或唯一提交的 ID后跟一个换行符。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>下面的标志进一步影响比较提交(但不是树)时的行为。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-m</p></div></div><div class="doc-postil"><div class="c-markdown"><p>默认情况下,<code>git diff-tree --stdin</code>不显示合并提交的差异。有了这个标志,它显示了所有父母的承诺不同之处。另见<code>-c</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>-s</p></div></div><div class="doc-postil"><div class="c-markdown"><p>默认情况下,<code>git diff-tree --stdin</code>以机器可读形式(不含<code>-p</code>)或补丁形式(含<code>-p</code>)显示差异。这个输出可以被抑制。这只对<code>-v</code>国旗有用。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-v</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这个标志导致<code>git diff-tree --stdin</code>在差异之前也显示提交消息。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--pretty=&lt;format&gt;   --format=&lt;format&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在给定的格式漂亮地打印提交日志中的内容,在这里<code>&lt;format&gt;</code>可以是一个<code>oneline</code><code>short</code><code>medium</code><code>full</code><code>fuller</code><code>email</code><code>raw</code><code>format:&lt;string&gt;</code><code>tformat:&lt;string&gt;</code>。什么时候<code>&lt;format&gt;</code>没有上述情况,并且<code>%placeholder</code>在其中,它的行为就像<code>--pretty=tformat:&lt;format&gt;</code>是给予的一样。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>有关每种格式的其他详细信息请参阅“PRETTY FORMATS”部分。当<code>=&lt;format&gt;</code>零件被省略时,它默认为<code>medium</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>注意:您可以在存储库配置中指定默认的漂亮格式(请参阅 git-config [1])。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--abbrev-commit</p></div></div><div class="doc-postil"><div class="c-markdown"><p>不显示完整的40字节十六进制提交对象名称只显示部分前缀。非默认位数可以用“--abbrev = &lt;n&gt;”来指定(如果显示,它也会修改差异输出)。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这应该使“--pretty = oneline”对于使用80列终端的人来说更加可读。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--no-abbrev-commit</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示完整的40字节十六进制提交对象名称。这种否定<code>--abbrev-commit</code>和暗示它的选项如“--oneline”。它也覆盖<code>log.abbrevCommit</code>变量。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--oneline</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这是一起使用的“--pretty = oneline --abbrev-commit”的缩写。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--encoding=&lt;encoding&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>提交对象在其编码头中记录用于日志消息的编码; 这个选项可以用来告诉命令在用户首选的编码中重新编写提交日志消息。对于非管道命令默认为UTF-8。请注意如果一个对象声称被编码<code>X</code>并且正在输出<code>X</code>,我们将逐字输出对象; 这意味着原始提交中的无效序列可能会被复制到输出中。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--expand-tabs=&lt;n&gt;   --expand-tabs   --no-expand-tabs</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>&lt;n&gt;</code>在输出中显示日志消息之前,执行一个标签扩展(将每个标签替换为足够的空格以填充下一个显示列的倍数)。<code>--expand-tabs</code>是一种短手<code>--expand-tabs=8</code>,并且<code>--no-expand-tabs</code>是一种短手<code>--expand-tabs=0</code>,即禁用选项卡扩展。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>默认情况下突片在相当格式由4个空格即缩进日志消息扩展<code>medium</code>,这是缺省值,<code>full</code><code>fuller</code>)。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--notes=&lt;treeish&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在显示提交日志消息时,显示注释提交的注释(请参阅 git-notes [1])。这是默认的<code>git log</code><code>git show</code>并且<code>git whatchanged</code>在没有命令<code>--pretty</code><code>--format</code>或者<code>--oneline</code>在命令行上给出的选项。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>默认情况下,显示的注释来自<code>core.notesRef</code><code>notes.displayRef</code>变量(或对应的环境覆盖)中列出的注释引用。有关更多详细信息,请参阅 git-config [1]。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>使用可选<code>&lt;treeish&gt;</code>参数,使用树状图来查找要显示的注释。当它开始时,树木可以指定完整的 refname <code>refs/notes/</code>; 当它开始时<code>notes/</code><code>refs/</code>并且否则<code>refs/notes/</code>以前缀形成ref的全名。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>多个 - 注释选项可以结合使用来控制显示哪些笔记。例如:“--notes = foo”将只显示“refs / notes / foo”中的注释; “--notes = foo --notes”将显示来自“refs / notes / foo”和默认音符refs的两个音符。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--no-notes</p></div></div><div class="doc-postil"><div class="c-markdown"><p>不要显示笔记。这会取消上述<code>--notes</code>选项,方法是重置从中显示注释的注释列表。选项按照命令行给出的顺序进行解析,因此,例如“--notes --notes = foo --no-notes --notes = bar”将仅显示“refs / notes / bar”中的注释。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--show-notes = &lt;treeish&gt;  - 无标准记录</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这些选项已被弃用。改为使用上面的 - 注释/  - 无备注选项。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--show-signature</p></div></div><div class="doc-postil"><div class="c-markdown"><p>通过签名传递<code>gpg --verify</code>并显示输出来检查签名提交对象的有效性。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--no-commit-id</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>git diff-tree</code>在适用时输出带有提交 ID 的行。该标志抑制了提交 ID 输出。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-c</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这个标志改变了合并提交的显示方式(这意味着它只有在给出一个&lt;tree-ish&gt;命令时才有用<code>--stdin</code>)。它显示了每个父母对合并结果的差异,而不是显示父母和结果之间的成对差异(这是<code>-m</code>选项的作用)。此外,它只列出所有父母修改过的文件。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--cc</p></div></div><div class="doc-postil"><div class="c-markdown"><p>该标志以与<code>-c</code>选项类似的方式改变了合并提交补丁的显示方式。它意味着<code>-c</code><code>-p</code>选项并进一步压缩修补程序的输出通过省略父母的内容只有两个变体的不感兴趣的区块并且合并结果不加修改地挑选其中的一个。当所有的hunks都不感兴趣时就像在任何其他“空比较”情况下一样提交本身和提交日志消息也不会显示。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--always</p></div></div><div class="doc-postil"><div class="c-markdown"><p>即使 diff 本身为空,也要显示提交本身和提交日志消息。</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>漂亮的格式</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>If the commit is a merge, and if the pretty-format is not <code>oneline</code>, <code>email</code> or <code>raw</code>, an additional line is inserted before the <code>Author:</code> line. This line begins with "Merge: " and the sha1s of ancestral commits are printed, separated by spaces. Note that the listed commits may not necessarily be the list of the <strong>direct</strong> parent commits if you have limited your view of history: for example, if you are only interested in changes related to a certain directory or file.</p></div></div><div class="doc-postil"><div class="c-markdown"><p>There are several built-in formats, and you can define additional formats by setting a pretty.&lt;name&gt; config option to either another format name, or a <code>format:</code> string, as described below (see git-config[1]). Here are the details of the built-in formats:</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p><code>oneline</code>&lt;sha1&gt; &lt;title line&gt;</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>This is designed to be as compact as possible.</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p><code>short</code>commit &lt;sha1&gt; Author: &lt;author&gt;</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>&lt;title line&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p><code>medium</code>commit &lt;sha1&gt; Author: &lt;author&gt; Date:   &lt;author date&gt;</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>&lt;title line&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>&lt;full commit message&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p><code>full</code>commit &lt;sha1&gt; Author: &lt;author&gt; Commit: &lt;committer&gt;</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>&lt;title line&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>&lt;full commit message&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p><code>fuller</code>commit &lt;sha1&gt; Author:     &lt;author&gt; AuthorDate: &lt;author date&gt; Commit:     &lt;committer&gt; CommitDate: &lt;committer date&gt;</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>&lt;title line&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>&lt;full commit message&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p><code>email</code>From &lt;sha1&gt; &lt;date&gt; From: &lt;author&gt; Date: &lt;author date&gt; Subject: PATCH &lt;title line&gt;</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>&lt;full commit message&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p><code>raw</code>The <code>raw</code> format shows the entire commit exactly as stored in the commit object. Notably, the SHA-1s are displayed in full, regardless of whether --abbrev or --no-abbrev are used, and <code>parents</code> information show the true parent commits, without taking grafts or history simplification into account. Note that this format affects the way commits are displayed, but not the way the diff is shown e.g. with <code>git log --raw</code>. To get full object names in a raw diff format, use <code>--no-abbrev</code>.</p></li><li><p><code>format:&lt;string&gt;</code>The <code>format:&lt;string&gt;</code> format allows you to specify which information you want to show. It works a little bit like printf format, with the notable exception that you get a newline with <code>%n</code> instead of <code>\n</code>.
E.g, <code>format:"The author of %h was %an, %ar%nThe title was &gt;&gt;%s&lt;&lt;%n"</code> would show something like this:
 The author of fe6e0ee was Junio C Hamano, 23 hours ago The title was &gt;&gt;t4119: test autocomputing -p&lt;n&gt; for traditional diff input.&lt;&lt;</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>The placeholders are:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%H`: commit hash</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%h`: abbreviated commit hash</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%T`: tree hash</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%t`: abbreviated tree hash</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%P`: parent hashes</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%p`: abbreviated parent hashes</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%an`: author name</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%aN`: author name (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%ae`: author email</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%aE`: author email (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%ad`: author date (format respects --date= option)</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%aD`: author date, RFC2822 style</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%ar`: author date, relative</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%at`: author date, UNIX timestamp</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%ai`: author date, ISO 8601-like format</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%aI`: author date, strict ISO 8601 format</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%cn`: committer name</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%cN`: committer name (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%ce`: committer email</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%cE`: committer email (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%cd`: committer date (format respects --date= option)</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%cD`: committer date, RFC2822 style</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%cr`: committer date, relative</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%ct`: committer date, UNIX timestamp</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%ci`: committer date, ISO 8601-like format</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%cI`: committer date, strict ISO 8601 format</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%d`: ref names, like the --decorate option of [git-log[1]](git-log)</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%D`: ref names without the " (", ")" wrapping.</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%e`: encoding</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%s`: subject</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%f`: sanitized subject line, suitable for a filename</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%b`: body</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%B`: raw body (unwrapped subject and body)</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%N`: commit notes</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%GG`: raw verification message from GPG for a signed commit</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%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</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%GS`: show the name of the signer for a signed commit</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%GK`: show the key used to sign a signed commit</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%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}`).</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%gd`: shortened reflog selector; same as `%gD`, but the refname portion is shortened for human readability (so `refs/heads/master` becomes just `master`).</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%gn`: reflog identity name</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%gN`: reflog identity name (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%ge`: reflog identity email</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%gE`: reflog identity email (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%gs`: reflog subject</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%Cred`: switch color to red</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%Cgreen`: switch color to green</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%Cblue`: switch color to blue</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%Creset`: reset color</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%C(…)`: color specification, as described under Values in the "CONFIGURATION FILE" section of [git-config[1]](git-config). 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 &amp;grave;--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.</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%m`: left (`&lt;`), right (`&gt;`) or boundary (`-`) mark</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%n`: newline</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%%`: a raw `%`</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%x00`: print a byte from a hex code</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%w([&lt;w&gt;[,&lt;i1&gt;[,&lt;i2&gt;]]])`: switch line wrapping, like the -w option of [git-shortlog[1]](git-shortlog).</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%&lt;(&lt;N&gt;[,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 &gt;= 2.</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%&lt;|(&lt;N&gt;)`: make the next placeholder take at least until Nth columns, padding spaces on the right if necessary</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%&gt;(&lt;N&gt;)`, `%&gt;|(&lt;N&gt;)`: similar to `%&lt;(&lt;N&gt;)`, `%&lt;|(&lt;N&gt;)` respectively, but padding spaces on the left</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%&gt;&gt;(&lt;N&gt;)`, `%&gt;&gt;|(&lt;N&gt;)`: similar to `%&gt;(&lt;N&gt;)`, `%&gt;|(&lt;N&gt;)` respectively, except that if the next placeholder takes more spaces than given and there are spaces on its left, use those spaces</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  `%&gt;&lt;(&lt;N&gt;)`, `%&gt;&lt;|(&lt;N&gt;)`: similar to `% &lt;(&lt;N&gt;)`, `%&lt;|(&lt;N&gt;)` respectively, but padding both sides (i.e. the text is centered)</pre></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-js">-  %(trailers): display the trailers of the body as interpreted by [git-interpret-trailers[1]](git-interpret-trailers)</pre></div></div><div class="doc-postil"><div class="c-markdown"><div class="table-wrapper"><table><thead><tr class="firstRow"><th style="text-align: left;"><div class="table-header"><p>注意</p></div></th><th style="text-align: left;"><div class="table-header"><p>一些占位符可能取决于给修订遍历引擎的其他选项。例如g * reflog选项将插入一个空字符串除非我们正在遍历 reflog 条目例如通过git log -g。如果在命令行中未提供 --decorated 和D 占位符将使用“短”修饰格式。</p></div></th></tr></thead><tbody></tbody></table></div></div></div><div class="doc-postil"><div class="c-markdown"><p>如果<code>+</code><code>%</code>占位符之后添加(加号),当且仅当占位符展开为非空字符串时,才在扩展之前插入换行符。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>如果<code>-</code><code>%</code>占位符之后添加(减号),则当且仅当占位符展开为空字符串时,才会删除紧接扩展之前的所有连续换行。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>如果在<code>%</code>占位符之后添加(空格),当且仅当占位符展开为非空字符串时,才会在扩展之前插入空格。</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p><code>tformat:</code><code>tformat:</code>格式的操作完全相同<code>format:</code>,不同之处在于它提供了“终结者”的语义,而不是“分隔符”的语义。换句话说,每个提交都附加了消息结束符(通常是一个换行符),而不是放置在条目之间的分隔符。这意味着单行格式的最终条目将以新的行正确终止,就像“在线”格式一样。例如:$ git log -2 --pretty = formath 4da45bef \ | perl -pe'$ _。=“ -  NO NEWLINE \ n”除非/ \ n /'4da45be 7134973  - 否NEWLINE $ git log -2 --pretty = tformath 4da45bef \ | perl -pe'$ _。=“ -  NO NEWLINE \ n”除非/ \ n /'4da45be 7134973</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>另外,任何无法识别的字符串<code>%</code>都会被解释为在它<code>tformat:</code>前面。例如,这两个是等价的:</p></div></div><div class="doc-postil"><div class="c-markdown"><p>$ git log -2 --pretty=tformat:%h 4da45bef $ git log -2 --pretty=%h 4da45bef</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>限制输出</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>如果您只对一部分文件(例如某些特定于体系结构的文件)的差异感兴趣,则可以这样做:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">git diff-tree -r &lt;tree-ish&gt; &lt;tree-ish&gt; arch/ia64 include/asm-ia64</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>它只会显示你在这两个目录中发生了什么变化。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>或者如果你正在寻找刚刚改变的东西,那就<code>kernel/sched.c</code>去做吧</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">git diff-tree -r &lt;tree-ish&gt; &lt;tree-ish&gt; kernel/sched.c</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>它会忽略与其他文件的所有区别。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>模式始终是前缀,并且完全匹配。没有通配符。更严格的是,它必须匹配完整的路径组件。即“富”不接<code>foobar.h</code>。“foo”确实匹配<code>foo/bar.h</code>所以它可以用来命名子目录。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>正常使用的一个例子是:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">torvalds@ppc970:~/git&gt; git diff-tree --abbrev 5319e4:100664 100664 ac348b... a01513...        git-fsck-objects.c</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>它告诉你最后一次提交只改变了一个文件(它来自这个文件:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">commit 3c6f7ca19ad4043e9e72fa94106f352897e651a8
tree 5319e4d609cdd282069cc4dce33c1db559539b03
parent b4e628ea30d5ab3606119d2ea5caeab141d38df7
author Linus Torvalds &lt;torvalds@ppc970.osdl.org&gt; Sat Apr 9 12:02:30 2005committer Linus Torvalds &lt;torvalds@ppc970.osdl.org&gt; Sat Apr 9 12:02:30 2005Make "git-fsck-objects" print out all the root commits it finds.Once I do the reference tracking, I'll also make it print out all the
HEAD commits it finds, which is even more interesting.</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>如果你在意)。</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>原始输出格式</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>“git-diff-index”“git-diff-tree”“git-diff-files”和“git diff -raw”的原始输出格式非常相似。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这些命令全部比较两组事物; 比较不同的是:</p></div></div><div class="doc-postil"><div class="c-markdown"><p>git-diff-index &lt;tree-ish&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>比较&lt;tree-ish&gt;和文件系统上的文件。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>git-diff-index --cached &lt;tree-ish&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>比较&lt;tree-ish&gt;和索引。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>git-diff-tree -r &lt;tree-ish-1&gt; &lt;tree-ish-2&gt; &lt;pattern&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>比较由两个参数命名的树。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>git-diff-files &lt;pattern&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>比较索引和文件系统上的文件。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>“git-diff-tree”命令通过打印正在比较的散列来开始输出。之后所有命令都会为每个更改的文件打印一个输出行。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>输出行的格式如下:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">in-place edit  :100644 100644 bcd1234... 0123456... M file0
copy-edit      :100644 100644 abcd123... 1234567... C68 file1 file2
rename-edit    :100644 100644 abcd123... 1234567... R86 file1 file3
create         :000000 100644 0000000... 1234567... A file4delete         :100644 000000 1234567... 0000000... D file5
unmerged       :000000 000000 0000000... 0000000... U file6</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>也就是说,从左到右:</p></div></div><div class="doc-postil"><div class="c-markdown"><ol class="ol-level-0 list-paddingleft-2"><li><p>复制品。</p></li><li><p>模式为“src”; 000000如果创建或未合并。</p></li><li><p>空间。</p></li><li><p>模式为“dst”; 000000如果删除或未合并。</p></li><li><p>空间。</p></li><li><p>sha1代表“src”; 0 {40}如果创建或未合并。</p></li><li><p>空间。</p></li><li><p>sha1为“dst”; 0 {40}如果创建,不合并或“看工作树”。</p></li><li><p>空间。</p></li><li><p>状态,然后是可选的“分数”编号。</p></li><li><p>选项卡或 NUL <code>-z</code>选项时使用。</p></li><li><p>“src”的路径</p></li><li><p>使用选项卡时<code>-z</code>选项卡或 NUL ; 只存在于C或R.</p></li><li><p>“dst”的路径; 只存在于C或R.</p></li><li><p>使用LF或 NUL <code>-z</code>选项时,可以终止记录。</p></li></ol></div></div><div class="doc-postil"><div class="c-markdown"><p>可能的状态字母是:</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>A添加一个文件</p></li><li><p>C将文件复制到新文件中</p></li><li><p>D删除文件</p></li><li><p>M修改文件的内容或模式</p></li><li><p>R重命名文件</p></li><li><p>T改变文件的类型</p></li><li><p>U文件未合并必须先完成合并然后才能提交</p></li><li><p>X“未知”更改类型最可能是一个错误请报告</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>状态字母 C 和 R 总是跟着一个分数(表示移动或复制的来源和目标之间的相似百分比)。状态字母 M 后可以跟一个文件重写的分数(表示不相似性的百分比)。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>如果文件是文件系统上的新文件并且与索引不同步,则&lt;sha1&gt;显示为全0。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>示例:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">:100644 100644 5be4a4...... 000000...... M file.c</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>如果没有这个<code>-z</code>选项,带有“不寻常”字符的路径名将按照配置变量的说明引用<code>core.quotePath</code>(请参阅 git-config [1])。使用<code>-z</code>文件名是逐字输出的并且该行由NUL字节终止。</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>比较格式的合并</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>"git-diff-tree", "git-diff-files" and "git-diff --raw"可以采取<code>-c</code><code>--cc</code>选项,也产生差异输出合并提交。输出与上述格式的不同之处在于:</p></div></div><div class="doc-postil"><div class="c-markdown"><ol class="ol-level-0 list-paddingleft-2"><li><p>每个父母都有一个冒号</p></li><li><p>还有更多的“src”模式和“src”sha1</p></li><li><p>状态是每个父级的连接状态字符</p></li><li><p>没有可选的“分数”号码</p></li><li><p>单一路径仅适用于“dst”</p></li></ol></div></div><div class="doc-postil"><div class="c-markdown"><p>示例:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">::100644 100644 100644 fabadb8... cc95eb0... 4866510... MM        describe.c</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>请注意,<code>combined diff</code>仅列出所有父母修改过的文件。</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>用-p 生成补丁</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>当使用选项运行“git-diff-index”“git-diff-tree”或“git-diff-files”时不带<code>-p</code>选项运行“git diff” <code>--raw</code>,使用“-p”运行“git log”选项它们不会产生上述输出; 相反,他们生成一个补丁文件。您可以通过<code>GIT_EXTERNAL_DIFF</code><code>GIT_DIFF_OPTS</code>环境变量自定义这些修补程序的创建。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-p 选项产生的东西与传统的diff格式略有不同</p></div></div><div class="doc-postil"><div class="c-markdown"><ol class="ol-level-0 list-paddingleft-2"><li><p>它前面有一个“git diff”头文件它看起来像这样diff --git a / file1 b / file2</p></li></ol></div></div><div class="doc-postil"><div class="c-markdown"><p><code>a/</code><code>b/</code>文件名是,除非重命名/副本所涉及的相同。尤其是,即使是创建或删除,<code>/dev/null</code>也可<code>not</code>用于替换文件名<code>a/</code><code>b/</code>文件名。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>当重命名/复制参与,<code>file1</code><code>file2</code>示出了重命名/复制的源文件的名称和重命名/复制分别产生,该文件的名称。</p></div></div><div class="doc-postil"><div class="c-markdown"><ol class="ol-level-0 list-paddingleft-2"><li><p>它后跟一个或多个扩展标题行:旧模式&lt;mode&gt;新模式&lt;mode&gt;已删除文件模式&lt;mode&gt;新文件模式&lt;mode&gt;&lt;path&gt;复制到&lt;path&gt;&lt;path&gt;重命名重命名为&lt;path&gt;相似索引&lt;number&gt;不相似索引&lt;number&gt;索引&lt;hash&gt; .. &lt;hash&gt; &lt;mode&gt;</p></li></ol></div></div><div class="doc-postil"><div class="c-markdown"><p>文件模式打印为6位八进制数字包括文件类型和文件权限位。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>扩展标题中的路径名称不包含<code>a/</code><code>b/</code>前缀。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>相似性指数是未改变的行的百分比不相似性指数是改变的行的百分比。它是一个向下舍入的整数后面跟着一个百分号。100的相似性指数值因此保留给两个相同的文件而100相异性意味着来自旧文件的任何行都不会将其转换为新的文件。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>索引行包含更改前后的 SHA-1校验和。如果文件模式没有改变则包含&lt;mode&gt;; 否则,单独的行表示旧模式和新模式。</p></div></div><div class="doc-postil"><div class="c-markdown"><ol class="ol-level-0 list-paddingleft-2"><li><p>带有“不常用”字符的路径名将按照配置变量的说明引用<code>core.quotePath</code>请参阅git-config [1])。</p></li><li><p><code>file1</code>输出中的所有文件在提交之前引用文件,所有<code>file2</code>文件在提交之后引用文件。将每个更改顺序应用于每个文件是不正确的。例如这个补丁会将a和bdiff --git a / ab / b重命名为重命名为b diff --git a / bb / a将重命名从b重命名为a</p></li></ol></div></div><div class="doc-postil"><div class="c-markdown"><h2>结合 diff 格式</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>任何 diff-generating 命令都可以使用<code>-c</code><code>--cc</code>选项<code>combined diff</code>在显示合并时生成一个。这是显示与 git-diff [1]或git-show [1]合并时的默认格式。还要注意,您可以<code>-m</code>选择这些命令中的任何一个来强制生成合并的单个父代的差异。</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>combined diff</code>格式如下:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">diff --combined describe.c
index fabadb8,cc95eb0..4866510--- a/describe.c+++ b/describe.c
@@@ -98,20 -98,12 +98,20 @@@        return (a_date &gt; b_date) ? -1 : (a_date == b_date) ? 0 : 1;  }- static void describe(char *arg) -static void describe(struct commit *cmit, int last_one)++static void describe(char *arg, int last_one)  { +        unsigned char sha1[20]; +        struct commit *cmit;
        struct commit_list *list;        static int initialized = 0;
        struct commit_name *n; +        if (get_sha1(arg, sha1) &lt; 0) +                usage(describe_usage); +        cmit = lookup_commit_reference(sha1); +        if (!cmit) +                usage(describe_usage); +        if (!initialized) {
                initialized = 1;                for_each_ref(get_name);</pre></div></div><div class="doc-postil"><div class="c-markdown"><ol class="ol-level-0 list-paddingleft-2"><li><p>它前面有一个“git diff”头看起来像这样当使用<code>-c</code>选项时diff  - 组合文件</p></li></ol></div></div><div class="doc-postil"><div class="c-markdown"><p>或者像这样(当使用<code>--cc</code>选项时):</p></div></div><div class="doc-postil"><div class="c-markdown"><p>diff --cc file</p></div></div><div class="doc-postil"><div class="c-markdown"><ol class="ol-level-0 list-paddingleft-2"><li><p>它后面跟着一个或多个扩展标题行此示例显示与两个父级合并index &lt;hash&gt;&lt;hash&gt; .. &lt;hash&gt; mode &lt;mode&gt;&lt;mode&gt; .. &lt;mode&gt;新文件模式&lt;mode&gt;删除文件模式&lt;mode&gt;&lt;mode&gt;</p></li></ol></div></div><div class="doc-postil"><div class="c-markdown"><p><code>mode &lt;mode&gt;,&lt;mode&gt;..&lt;mode&gt;</code>行仅在至少有一个&lt;mode&gt;与其他行不同时出现。具有关于检测到的内容移动(重命名和复制检测)的信息的扩展标题被设计为与两个&lt;tree-ish&gt;的差异一起工作,并且不被组合的差异格式使用。</p></div></div><div class="doc-postil"><div class="c-markdown"><ol class="ol-level-0 list-paddingleft-2"><li><p>紧接着是两行文件/文件头--- a / file +++ b / file</p></li></ol></div></div><div class="doc-postil"><div class="c-markdown"><p>类似于传统<code>unified</code>差异格式的双行标题,<code>/dev/null</code>用于表示创建或删除的文件。</p></div></div><div class="doc-postil"><div class="c-markdown"><ol class="ol-level-0 list-paddingleft-2"><li><p>块头格式被修改以防止人们意外地将其提供给<code>patch -p1</code>。组合的差异格式是为了审查合并提交更改而创建的,并不适用于应用。此更改与扩展<code>index</code>标头中的更改类似:@@@ &lt;from-file-range&gt; &lt;from-file-range&gt; &lt;to-file-range&gt; @@@</p></li></ol></div></div><div class="doc-postil"><div class="c-markdown"><p><code>@</code>组合diff格式的块头中有父数+ 1个字符。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>与传统的<code>unified</code>差异格式不同,该格式显示两个文件 A 和 B其中一列<code>-</code>(减号 - 出现在 A 中但在 B 中删除),<code>+</code>(加 - 在 A 中丢失但添加到B<code>" "</code>(空格 - 不变)前缀,这种格式将两个或多个文件 file1file2...与一个文件X进行比较并显示 X 与每个 fileN 的不同之处。每个 fileN 的一列都被预置在输出行中以指出X的行与其不同。</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>-</code>N 列中的字符表示该行出现在 fileN 中,但不出现在结果中。<code>+</code>N 列中的一个字符表示该行出现在结果中,而 fileN 没有该行(换句话说,从该父母的角度来看,该行被添加)。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在上面的输出示例中,函数签名已从两个文件中更改(因此<code>-</code>file1和file2中的两个删除以及<code>++</code>意味着已添加的一行不会出现在file1或file2中。还有八个其他行与file1相同但不会出现在 file2 中(因此前缀为<code>+</code>)。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在显示时<code>git diff-tree -c</code>它将合并提交的父项与合并结果进行比较即file1..fileN为父项。如图所示<code>git diff-files -c</code>它将两个未解决的合并父项与正在运行的树文件进行比较即file1为阶段2 aka“我们的版本”file2为阶段3 aka“他们的版本”</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>其他差异格式</h2></div></div><div class="doc-postil"><div class="c-markdown"><p><code>--summary</code>选项介绍新添加,删除,重命名和复制的文件。该<code>--stat</code>选项将 diffstat1图添加到输出。这些选项可以与其他选项结合使用<code>-p</code>用于人类消费。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>当显示涉及重命名或复制的更改时,<code>--stat</code>输出会通过组合路径名的通用前缀和后缀来紧凑地格式化路径名。例如,移动的改变<code>arch/i386/Makefile</code>,以<code>arch/x86/Makefile</code>在修改4线将示出这样的</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">arch/{i386 =&gt; x86}/Makefile    |   4 +--</pre></div></div><div class="doc-postil"><div class="c-markdown"><p><code>--numstat</code>选项提供了diffstat1信息但设计用于更简单的机器消耗。<code>--numstat</code>输出中的条目如下所示:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">1        2        README3        1        arch/{i386 =&gt; x86}/Makefile</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>也就是说,从左到右:</p></div></div><div class="doc-postil"><div class="c-markdown"><ol class="ol-level-0 list-paddingleft-2"><li><p>增加的行数;</p></li><li><p>标签;</p></li><li><p>删除的行数;</p></li><li><p>标签;</p></li><li><p>路径名(可能带有重命名/复制信息);</p></li><li><p>一个换行符。</p></li></ol></div></div><div class="doc-postil"><div class="c-markdown"><p><code>-z</code>输出选项有效时,输出格式如下:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">1        2        README NUL3        1        NUL arch/i386/Makefile NUL arch/x86/Makefile NUL</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>那是:</p></div></div><div class="doc-postil"><div class="c-markdown"><ol class="ol-level-0 list-paddingleft-2"><li><p>增加的行数;</p></li><li><p>标签;</p></li><li><p>删除的行数;</p></li><li><p>标签;</p></li><li><p>NUL只有在重命名/复制时才存在);</p></li><li><p>preimage 中的路径名;</p></li><li><p>NUL只有在重命名/复制时才存在);</p></li><li><p>postimage中的路径名只有在重命名/复制时才存在);</p></li><li><p>NUL。</p></li></ol></div></div><div class="doc-postil"><div class="c-markdown"><p><code>NUL</code>重命名之前的 preimage 路径之前的额外内容是允许读取输出的脚本判断当前正在读取的记录是单路径记录还是重命名/复制记录,而不提前读取。阅读添加和删除的行后,读取<code>NUL</code>会产生路径名,但如果是这样<code>NUL</code>,该记录将显示两个路径。</p></div></div></div>