Git 中文参考(二)(2)https://developer.aliyun.com/article/1565794
输出
此命令的输出旨在用作提交模板注释。默认的长格式设计很人性化,易读,详细和可描述性。其内容和输出格式随时可更改。
与许多其他 Git 命令不同,输出中提到的路径是相对于当前目录的,如果您在子目录中工作(这是故意的,以帮助剪切和粘贴)。请参阅下面的 status.relativePaths 配置选项。
短格式
在短格式中,每个路径的状态显示为这些形式之一
XY PATH XY ORIG_PATH -> PATH
其中ORIG_PATH
是重命名/复制内容的来源。只有在重命名或复制条目时才会显示ORIG_PATH
。 XY
是一个双字母状态代码。
字段(包括->
)通过单个空格彼此分开。如果文件名包含空格或其他不可打印的字符,则该字段将以 C 字符串文字的方式引用:由 ASCII 双引号(34)字符包围,并使用内部特殊字符反斜杠转义。
对于具有合并冲突的路径,X
和Y
显示合并每一侧的修改状态。对于没有合并冲突的路径,X
显示索引的状态,Y
显示工作树的状态。对于未跟踪路径,XY
为??
。其他状态代码可以解释如下:
- ‘’ =未经修改
- M =修改
- A =已添加
- D =已删除
- R =重命名
- C =复制
- U =已更新但未合并
除非--ignored
选项生效,否则不会列出忽略的文件,在这种情况下,XY
为!!
。
X Y Meaning ------------------------------------------------- [AMD] not updated M [ MD] updated in index A [ MD] added to index D deleted from index R [ MD] renamed in index C [ MD] copied in index [MARC] index and work tree matches [ MARC] M work tree changed since index [ MARC] D deleted in work tree [ D] R renamed in work tree [ D] C copied in work tree ------------------------------------------------- D D unmerged, both deleted A U unmerged, added by us U D unmerged, deleted by them U A unmerged, added by them D U unmerged, deleted by us A A unmerged, both added U U unmerged, both modified ------------------------------------------------- ? ? untracked ! ! ignored -------------------------------------------------
子模块具有更多状态,但是不报告 M 子模块具有不同的 HEAD,而是在子模块已修改内容的索引中记录?子模块具有未跟踪的文件,因为子模块中的修改内容或未跟踪文件无法通过超级项目中的git add
添加以准备提交。
m 和 ? 递归应用。例如,如果子模块中的嵌套子模块包含未跟踪的文件,则报告为 ? 也是如此。
如果使用-b,则短格式状态前面有一行
## branchname tracking info
Porcelain 格式版本 1
版本 1 中 porcelain 格式类似于短格式,但保证不会在 Git 版本之间以向后兼容的方式或基于用户配置进行更改。这使其成为脚本解析的理想选择。上面简短格式的描述也描述了 porcelain 格式,但有一些例外:
- 用户的 color.status 配置不受认可;颜色永远都会关闭。
- 用户的 status.relativePaths 配置不受认可;显示的路径始终相对于存储库根目录。
还有一种备用-z 格式建议用于机器解析。在该格式中,状态字段是相同的,但其他一些事情会发生变化。首先,-> 从重命名条目中省略, 并且字段顺序被反转(例如,from -> 到变为 from)。其次,NUL(ASCII 0)跟在每个文件名后面,将空格替换为字段分隔符和终止换行符(但空格仍然将状态字段与第一个文件名分开)。第三,包含特殊字符的文件名不是特殊格式的;不执行引用或反斜杠转义。
任何子模块更改都会报告为已修改M
而不是m
或单个?
。
Porcelain 格式版本 2
版本 2 格式添加了有关工作树状态和更改项目的更多详细信息。版本 2 还定义了一组易于解析的可扩展可选标头。
标题行以“#”开头,并添加以响应特定的命令行参数。解析器应该忽略它们无法识别的标头。
分支标题
如果给出--branch
,则打印一系列标题行,其中包含有关当前分支的信息。
Line Notes ------------------------------------------------------------ # branch.oid <commit> | (initial) Current commit. # branch.head <branch> | (detached) Current branch. # branch.upstream <upstream_branch> If upstream is set. # branch.ab +<ahead> -<behind> If upstream is set and the commit is present. ------------------------------------------------------------
跟踪条目修改
在标题之后,为跟踪的条目打印一系列行。可以根据变化的类型在三种不同线格式中的选择一种来描述条目。跟踪的条目以未定义的顺序打印;解析器应允许以任何顺序混合使用 3 种线型。
普通更改的条目具有以下格式:
1 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <path>
重命名或复制的条目具有以下格式:
2 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <X><score> <path><sep><origPath>
Field Meaning -------------------------------------------------------- <XY> A 2 character field containing the staged and unstaged XY values described in the short format, with unchanged indicated by a "." rather than a space. <sub> A 4 character field describing the submodule state. "N..." when the entry is not a submodule. "S<c><m><u>" when the entry is a submodule. <c> is "C" if the commit changed; otherwise ".". <m> is "M" if it has tracked changes; otherwise ".". <u> is "U" if there are untracked changes; otherwise ".". <mH> The octal file mode in HEAD. <mI> The octal file mode in the index. <mW> The octal file mode in the worktree. <hH> The object name in HEAD. <hI> The object name in the index. <X><score> The rename or copy score (denoting the percentage of similarity between the source and target of the move or copy). For example "R100" or "C75". <path> The pathname. In a renamed/copied entry, this is the target path. <sep> When the `-z` option is used, the 2 pathnames are separated with a NUL (ASCII 0x00) byte; otherwise, a tab (ASCII 0x09) byte separates them. <origPath> The pathname in the commit at HEAD or in the index. This is only present in a renamed/copied entry, and tells where the renamed/copied contents came from. --------------------------------------------------------
未合并的条目具有以下格式;第一个字符是“u”,用于区分普通的更改条目。
u <xy> <sub> <m1> <m2> <m3> <mW> <h1> <h2> <h3> <path>
Field Meaning -------------------------------------------------------- <XY> A 2 character field describing the conflict type as described in the short format. <sub> A 4 character field describing the submodule state as described above. <m1> The octal file mode in stage 1. <m2> The octal file mode in stage 2. <m3> The octal file mode in stage 3. <mW> The octal file mode in the worktree. <h1> The object name in stage 1. <h2> The object name in stage 2. <h3> The object name in stage 3. <path> The pathname. --------------------------------------------------------
其他项目
跟踪条目(如果需要),将打印一系列未跟踪的行,然后忽略在工作树中找到的项目。
未跟踪的项目具有以下格式:
? <path>
忽略的项目具有以下格式:
! <path>
路径名格式注释和-z
当给出-z
选项时,路径名按原样打印,没有任何引号,行以 NUL(ASCII 0x00)字节终止。
如果没有-z
选项,则会引用具有“异常”字符的路径名,如配置变量core.quotePath
所述(参见 git-config [1] )。
配置
该命令符合color.status
(或status.color
- 它们的含义相同,后者保持向后兼容性)和color.status.
配置变量以使其输出着色。
如果 config 变量status.relativePaths
设置为 false,则显示的所有路径都相对于存储库根目录,而不是当前目录。
如果status.submoduleSummary
设置为非零数字或为真(与-1 或无限数字相同),则将为长格式启用子模块摘要,并显示已修改子模块的提交摘要(请参阅 git-submodule [1] 的–summary-limit 选项)。请注意,当diff.ignoreSubmodules
设置为 all 时,或者仅对于那些submodule..ignore=all
的子模块,将禁止所有子模块的 status 命令的摘要输出。要查看被忽略的子模块的摘要,您可以使用–ignore-submodules=dirty 命令行选项或 git submodule summary 命令,该命令显示类似的输出但不遵循这些设置。
后台刷新
默认情况下,git status
将自动刷新索引,从工作树更新缓存的统计信息并写出结果。写出更新的索引是一种并非严格必要的优化(status
计算自身的值,但将它们写出来只是为了保证后续程序不重复的计算)。当status
在后台运行时,写入期间保持的锁定可能与其他同时的进程冲突,导致它们失败。在后台运行status
的脚本应考虑使用git --no-optional-locks status
(详见 git [1] )。
也可以看看
GIT
部分 git [1] 套件
git-diff
贡献者:honglyua
名称
git-diff - 显示提交之前,提交和工作树之间的更改等
概要
git diff [<options>] [<commit>] [--] [<path>…] git diff [<options>] --cached [<commit>] [--] [<path>…] git diff [<options>] <commit> <commit> [--] [<path>…] git diff [<options>] <blob> <blob> git diff [<options>] --no-index [--] <path> <path>
描述
显示工作树与索引或树之间的更改,索引与树之间的更改,两个树之间的更改,两个 blob 对象之间的更改或磁盘上两个文件之间的更改。
git diff [<options>] [--] [<path>…]
此表单用于查看您相对于索引所做的更改(下一次提交的暂存区域)。换句话说,差异就是你 _ 可以 _ 告诉 Git 即将要添加,但还没有添加到索引的内容。您可以使用 git-add [1] 暂存这些更改。
git diff [<options>] --no-index [--] <path> <path>
此表单用于比较文件系统上给定的两个路径。在由 Git 控制的工作树中运行命令时,可以省略--no-index
选项,并且至少有一个路径指向工作树外部,或者在 Git 控制的工作树外运行命令。
git diff [<options>] --cached [<commit>] [--] [<path>…]
此表单用于查看您为下一次提交而暂存的内容与已经的内容之间的更改。通常,您希望与最新提交进行比较,因此如果您不提供,则默认为 HEAD。如果 HEAD 不存在(例如未出生的分支)并且没有给出,它将显示所有暂存的更改。–staged 是–cached 的同义词。
git diff [<options>] <commit> [--] [<path>…]
此表单用于查看工作树中相对于已经提交的更改。您可以使用 HEAD 将其与最新提交进行比较,或使用分支名称与其他分支的提示进行比较。
git diff [<options>] <commit> <commit> [--] [<path>…]
这是为了查看两个任意之间的更改。
git diff [<options>] <commit>..<commit> [--] [<path>…]
这与之前的表格同义。如果在一侧被省略,它将具有与使用 HEAD 相同的效果。
git diff [<options>] <commit>...<commit> [--] [<path>…]
此表单用于查看分支上的更改,从两个的共同祖先开始,包含第二个及以上的节点。 “git diff A … B”相当于“git diff $(git merge-base A B)B”。您可以省略中的任何一个,它与使用 HEAD 具有相同的效果。
如果你正在做一些特殊操作,应该注意在上面描述中的所有,除了使用“…”符号的最后两种形式之外,可以是任何。
有关拼写的更完整列表的详细列表,请参阅 gitrevisions [7] 中的“指定修订”部分。然而,“diff”是关于比较两个 _ 端点 _,而不是范围和范围符号(“…”和“ … “)并不是指 gitrevisions [7] 中”指定范围“部分中定义的范围。
git diff [<options>] <blob> <blob>
此表单用于查看两个 blob 对象的原始内容之间的差异。
选项
-p
-u
--patch
生成补丁(请参阅生成补丁的部分)。这是默认值。
-s
--no-patch
抑制差异输出。对于git show
等默认显示补丁的命令,或取消--patch
的效果很有用。
-U<n>
--unified=<n>
生成行的上下文差异。而不是通常的三行。意味着--patch
或-p
。
--output=<file>
输出到指定文件汇总,而不是标准输出中。
--output-indicator-new=<char>
--output-indicator-old=<char>
--output-indicator-context=<char>
在生成补丁时,用特殊字符表明哪些行时 new,old,context。通常是用 +, - and ’ '。
--raw
以原始格式生成 diff。
--patch-with-raw
-p --raw
的同义词。
--indent-heuristic
启用改变差异块边界的启发式以使补丁更易于阅读。这是默认值。
--no-indent-heuristic
禁用缩进启发式。
--minimal
花些额外的时间来确保产生尽可能小的差异。
--patience
使用“patience diff”算法生成差异。
--histogram
使用“histogram diff”算法生成差异。
--anchored=<text>
使用“anchored diff”算法生成差异。
可以多次指定此选项。
如果源和目标中都存在一行,只存在一次,并以此文本开头,则此算法会尝试阻止它在输出中显示为删除或添加。它在内部使用“patience diff”算法。
--diff-algorithm={patience|minimal|histogram|myers}
选择差异算法。变体如下:
default, myers
基本的贪心差异算法。目前,这是默认值。
minimal
花些额外的时间来确保产生尽可能小的差异。
patience
生成补丁时使用“patience diff”算法。
histogram
该算法将”patience diff“算法扩展为“支持低发生的共同元素”。
例如,如果将diff.algorithm
变量配置为非默认值并想要使用默认值,则必须使用--diff-algorithm=default
选项。
--stat[=<width>[,<name-width>[,<count>]]]
生成 diffstat。默认情况下,文件名部分,图形部分的其余部分将使用必要的空间。最大宽度默认为终端宽度,如果未连接到终端,则为 80 列,并且可以被覆盖。可以通过在逗号后面给出另一个宽度来限制文件名部分的宽度。可以使用--stat-graph-width=
(影响生成统计图的所有命令)或设置diff.statGraphWidth=
(不影响git format-patch
)来限制图形部分的宽度。通过给出第三个参数,可以将输出限制为第一个行,如果有更多,则将以...
表示。
也可以使用--stat-width=
,--stat-name-width=
和--stat-count=
单独设置这些参数。
--compact-summary
输出扩展标题信息的精简摘要,例如文件创建或删除(“新建”或“消失”,如果是符号链接,则可选“+l”)和文件权限更改(“+x”或“-x”用于添加或删除 diffstat 中的可执行位)。信息放在文件名部分和图形部分之间。意味着--stat
。
--numstat
与--stat
类似,但是为了更加友好,它用十进制显示添加和删除的行数以及没有缩写的路径名。对于二进制文件,输出两个-
而不是0 0
。
--shortstat
仅输出--stat
格式的最后一行,其中包含已修改文件的总数,以及已添加和已删除行的总数。
-X[<param1,param2,…>]
--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
。
--cumulative
与–dirstat=cumulative 相同
--dirstat-by-file[=<param1,param2>…]
与–dirstat=files,param1,param2…相同
--summary
输出扩展标题信息的精简摘要,例如创建,重命名和模式更改。
--patch-with-stat
与-p --stat
相同。
-z
当给出--raw
,--numstat
,--name-only
或--name-status
时,不使用路径名和 NUL 作为输出字段终止符。
如果没有此选项,则会引用具有“异常”字符的路径名,如配置变量core.quotePath
所述(参见 git-config [1] )。
--name-only
仅显示已更改文件的名称。
--name-status
仅显示已更改文件的名称和状态。有关状态字母的含义,请参阅--diff-filter
选项的说明。
--submodule[=<format>]
指定子模块的差异如何显示。当指定--submodule=short
时,使用 short 格式。此格式仅显示范围开头和结尾的提交名称。当指定--submodule
或--submodule=log
时,使用 log 格式。此格式列出所有 commits 的提交,类似git-submodule [1] 中summary
的功能。当指定--submodule=diff
时,使用 diff 格式。此格式显示提交范围之间子模块内容更改的内联差异。如果未设置配置选项,则默认为diff.submodule
或 short 格式。
--color[=<when>]
显示彩色差异。 --color
(即没有 = )与--color=always
相同时。 < when> 可以是always
,never
或auto
之一。可以通过color.ui
和color.diff
配置设置进行更改。
--no-color
关掉彩色差异。这可用于覆盖配置设置。它与--color=never
相同。
--color-moved[=<mode>]
移动的代码行的颜色不同。可以通过diff.colorMoved
配置设置进行更改。如果没有给出选项,则默认值为 no ,如果给出没有模式的选项,则默认为 zebra 。模式必须是以下之一:
no
移动的线条不会突出显示。
default
是zebra
的同义词。这可能会在未来转变为更明智的模式。
plain
Git 中文参考(二)(4)https://developer.aliyun.com/article/1565796