diff
比较文件在暂存区和工作区的差异.显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别
实例
显示暂存区和工作区的差异
- git diff
显示暂存区和上一个commit的差异
- git diff --cached [file]
查看已缓存的与未缓存的所有改动
- git diff HEAD
显示摘要而非整个 diff
- git diff --stat
显示两次提交之间的差异
- git diff [first-branch]...[second-branch]
显示今天你写了多少行代码
- git diff --shortstat "@{0 day ago}"
选项
- -p,-u,--patch
-
生成补丁。这是默认的。
- -s,--no-patch
-
抑制差异输出。对于像
git show
这样的命令很有用,这些命令默认情况下显示补丁,或取消--patch
的效果。 - -U<n>,--unified=<n>
-
用上下文的
<n>
行而不是通常的三行生成差异。意味着--patch
。 - --output=<file>
-
输出到一个特定的文件,而不是stdout。
- --output-indicator-new=<char>,--output-indicator-old=<char>,--output-indicator-context=<char>
-
指定用于在生成的修补程序中指示新行,旧行或上下文行的字符。通常它们分别是 + , - 和’'。
- --raw
-
生成原始格式的差异。
- --patch-with-raw
-
-p
--raw
的同义词。 - --indent-heuristic
-
启用启发式,移动
diff hunk
的边界,使补丁更容易阅读。这是默认的。 - --no-indent-heuristic
-
禁用缩进启发式。
- --minimal
-
花额外的时间来确保产生最小的差异。
- --patience
-
使用 "耐心差异 "算法生成差异。
- --histogram
-
使用 "直方图差异 "算法生成差异。
- --anchored=<text>
-
使用 "锚定差异 "算法生成一个差异。
-
如果一行在源文件和目的文件中都存在,只存在一次,并且以这个文本开始,这个算法就会试图防止它在输出中出现删除或添加。它内部使用了 "耐心差异 "算法。
- --diff-algorithm={patience|minimal|histogram|myers}
-
选择一种差异算法。变体如下:
-
default
,myers
基本的greedy diff算法。目前,这是默认的。
-
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
-
输出扩展头信息的简明摘要,例如文件创建或删除(“new”或“gone”,如果是符号链接,则可选“+l”)和模式更改(“+x”或“-x”用于添加或删除diffstat 中的可执行位)。信息放在文件名部分和图形部分之间。暗示
--stat
。 - --numstat
-
与
--stat
相似,但是以十进制表示法和路径名显示添加和删除的行数,不带缩写,以使其对计算机更友好。对于二进制文件,输出两个-
而不是说0
0
。 - --shortstat
-
仅输出
--stat
格式的最后一行,其中包含已修改文件的总数以及添加和删除的行数。 - -X[<param1,param2,…>],--dirstat[=<param1,param2,…>]
-
输出每个子目录的相对变化量的分布。可以通过将
--dirstat
的行为传递给逗号分隔的参数列表来进行自定义。默认值由diff.dirstat
配置变量控制。可以使用以下参数: -
changes
通过计算从源文件中删除或添加到目标文件中的行数来计算dirstat的数量。这忽略了文件中纯代码的移动量。换句话说,重新安排文件中的行数不会像其他变化那样被计算。这是没有参数时的默认行为。
-
lines
通过执行常规的基于行的差异分析,并计算已删除/添加的行数,计算目录统计号。(对于二进制文件,请改为计算64字节的块,因为二进制文件没有自然的行概念)。与 changes 行为相比,这是更昂贵的--dirstat
行为,但是它确实将文件中重新排列的行数与其他更改一样多。结果输出与您从其他--*stat
选项获得的输出一致。
-
files
通过计算更改的文件数来计算目录统计数。每个更改的文件在dirstat分析中均相等计数。这是在计算上最便宜的--dirstat
行为,因为它根本不必查看文件内容。
-
cumulative
同样在父目录的子目录中计算更改。请注意,使用cumulative
,报告的百分比之和可能超过100%。可以使用noncumulative
参数指定默认(非累积)行为。
-
<limit>
一个整数参数指定一个截止百分比(默认为3%)。贡献小于这个百分比的目录不会显示在输出中。
-
示例:以下内容将对更改的文件进行计数,同时忽略目录少于更改的文件总量的10%,并在父目录中累积子目录计数:
--dirstat=files,10,cumulative
。 - --cumulative
-
同义词 --dirstat=cumulative
- --summary
-
输出扩展头信息的精简摘要,如创建、重命名和模式变化。
- --patch-with-stat
-
-p
--stat
的同义词。 - -z
-
如果没有此选项,则引用带有“不寻常”字符的路径名,如配置变量
core.quotePath
所述 -
--name-only
-
仅显示更改文件的名称。文件名通常以 UTF-8 编码。
-
--name-status
-
仅显示更改文件的名称和状态。有关状态字母的含义。
- --submodule[=<format>]
-
指定如何显示子模块中的差异
- --color[=<when>]
-
显示彩色差异。
--color
(即不带有=<when>
)与--color=alway
s 相同。<when>
可以是always
,never
或auto
之一。可以通过color.ui
和color.diff
配置设置进行更改。 - --no-color
-
关闭彩色差异。这可用于覆盖配置设置。它与
--color=never
相同。 - --color-moved[=<mode>]
-
移动的代码行的颜色不同。可以通过
diff.colorMoved
配置设置进行更改。如果没有给出选项,<mode>
默认为no
,如果没有给出选项,则默认为zebra
。该模式必须是以下之一: -
no
被移动的线条不会被高亮显示。
-
default
是zebra
的同义词。将来可能会更改为更明智的模式。
-
plain
在一个位置添加并在另一位置删除的任何行都将使用color.diff.newMoved
进行着色。同样,color.diff.oldMoved
将用于在diff中其他位置添加的删除行。此模式可以拾取任何已移动的行,但是在查看是否确定代码块是否被正确排列的情况下,它并不是很有用。
-
blocks
贪婪地检测到至少包含20个字母数字字符的移动文本块。使用color.diff.{old,new}Moved
颜色绘制检测到的块。不能将相邻的块区分开。
-
zebra
与在 blocks 模式下一样,检测到已移动文本的块。使用color.diff.{old,new}Moved color
或color.diff.{old,new}MovedAlternative
。两种颜色之间的变化表示检测到新的块。
-
dimmed-zebra
与 zebra 相似,但对移动的代码中不感兴趣的部分执行了其他调光。两个相邻块的边界线被认为很有趣,其余的都没有意思。dimmed_zebra
是已弃用的同义词。
- -M[<n>],--find-renames[=<n>]
-
检测重命名。如果指定了 n ,它是相似性指数的阈值(即添加/删除量与文件大小相比)。例如, -M90% 表示如果 90% 以上的文件没有更改,Git 应该将删除/添加对视为重命名。如果没有 % 符号,则该数字将被读取为分数,前面有一个小数点。即, -M5 变为 0.5,因此与 -M50% 相同。同样, -M05 与 -M5% 相同。要将检测限制为精确重命名,请使用 -M100% 。默认相似度指数为 50%。
- -C[<n>],--find-copies[=<n>]
-
检测副本以及重命名。
- --find-copies-harder
-
出于性能原因,默认情况下, -C 选项仅在副本的原始文件在同一变更集中被修改时才查找副本。该标志使命令检查未修改的文件作为副本源的候选对象。对于大型项目,这是非常昂贵的操作,因此请谨慎使用。提供多个 -C 选项具有相同的效果。
- -D,--irreversible-delete
-
忽略要删除的原映像,即仅输出标头,而不输出原映像和
/dev/null
之间的差异。 -
与 -B 一起使用时,还删除删除/创建对的删除部分中的原映像。
- -l<num>
-
在 -M 和 -C 选项涉及能够检测的重命名/份廉价地子集一些初步步骤,随后是所有剩余的未配对的目的地进行比较,以所有相关来源的穷尽备用部分。(对于重命名,只有剩余的未配对源是相关的;对于副本,所有原始源都是相关的。)对于 N 个源和目的地,这个详尽的检查是 O(N^2)。如果所涉及的源/目标文件数量超过指定数量,则此选项可防止重命名/复制检测的详尽部分运行。默认为
diff.renameLimit
。请注意,值 0 被视为无限制。 - -a,--text
-
将所有文件视为文本。
- --ignore-cr-at-eol
-
在进行比较时,忽略行末的回车。
- -b,--ignore-space-change
-
忽略空白字符数量的变化。这将忽略行末的空白字符,并将所有其他由一个或多个空白字符组成的序列视为相等。
- -w,--ignore-all-space
-
比较行时忽略空白。即使一行有空白,而另一行没有空白,也会忽略差异。
- --ignore-blank-lines
-
忽略行均为空白的变化。
- -I<regex>,--ignore-matching-lines=<regex>
-
忽略所有行均与<regex>匹配的更改。可以多次指定此选项。
- --inter-hunk-context=<lines>
-
显示diff块之间的上下文,直到指定的行数,从而融合彼此靠近的块。默认为
diff.interHunkContext
或0(如果未设置config选项)。 - -W,--function-context
-
将整个功能显示为每次更改的上下文行
- <path>…
-
如果指定了
参数,则用于将diff限制为命名路径(您可以指定目录名称,并获取其下所有文件的diff)。