Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.34.1 no changes
- 2.34.0 11/15/21
- 2.31.1 → 2.33.1 no changes
- 2.31.0 03/15/21
- 2.30.2 no changes
- 2.30.1 02/08/21
- 2.24.1 → 2.30.0 no changes
- 2.24.0 11/04/19
- 2.22.1 → 2.23.4 no changes
- 2.22.0 06/07/19
- 2.21.1 → 2.21.4 no changes
- 2.21.0 02/24/19
- 2.19.1 → 2.20.5 no changes
- 2.19.0 09/10/18
- 2.18.1 → 2.18.5 no changes
- 2.18.0 06/21/18
- 2.17.1 → 2.17.6 no changes
- 2.17.0 04/02/18
- 2.16.6 12/06/19
- 2.15.4 no changes
- 2.14.6 12/06/19
- 2.13.7 05/22/18
- 2.12.5 no changes
- 2.11.4 09/22/17
- 2.7.6 → 2.10.5 no changes
- 2.6.7 05/05/17
- 2.5.6 05/05/17
- 2.4.12 05/05/17
- 2.3.10 no changes
- 2.2.3 09/04/15
描述
显示索引文件和当前HEAD提交有差异的路径,工作树和索引文件有差异的路径,以及工作树中不被Git追踪的路径(也不被gitignore[5]忽略)。前者是你通过运行 "git commit "会提交的东西;第二和第三者是你在运行 "git commit "之前通过运行 "git add "可以提交的东西。
选项
- -s
- --short
-
以简短的形式给出输出。
- -b
- --branch
-
即使在短文中也要显示分支和跟踪信息。
- --show-stash
-
显示目前藏匿的条目数量。
- --porcelain[=<version>]
-
以易于解析的格式给出脚本的输出。 这类似于简短的输出,但在不同的Git版本中,无论用户配置如何,都会保持稳定。详见下文。
版本参数用于指定格式版本。 这是可选的,默认为原始版本的 "v1 "格式。
- --long
-
给出长格式的输出。这是默认的。
- -v
- --verbose
-
除了显示被修改的文件名外,还显示被分阶段提交的文本修改(即,像`git diff --cached`的输出)。如果`-v`被指定了两次,那么也会显示工作树中尚未分阶段的变化(即,像`git diff`的输出)。
- -u[<mode>]
- --untracked-files[=<mode>]
-
Show untracked files.
模式参数用于指定对未跟踪文件的处理。 它是可选的:默认为 "所有",如果指定,必须与选项卡在一起(例如,
-uno
,但不是`-u no`)。可能的选择是。
-
no - 不显示未跟踪的文件。
-
normal - 显示未被追踪的文件和目录。
-
all - 也显示未被追踪的目录中的单个文件。
当不使用`-u`选项时,将显示未跟踪的文件和目录(即与指定`normal`相同),以帮助你避免忘记添加新创建的文件。 因为在文件系统中寻找未跟踪的文件需要额外的工作,在一个大的工作树中,这种模式可能需要一些时间。 如果支持的话,考虑启用无痕缓存和分割索引(见`git upd-index --untracked-cache`和`git upd-index --split-index`),否则你可以使用`no`来让`git status`更快地返回而不显示无痕文件。
默认值可以用git-config[1]中记载的 status.showUntrackedFiles 配置变量来改变。
-
- --ignore-submodules[=<when>]
-
在寻找变化时忽略子模块的变化。<when>可以是 "none"、"untracked"、"dirty "或 "all",这是默认的。 使用 "none",當子模塊包含未被追蹤或修訂的檔案,或者它的頭部與超級工程中記錄的提交不同時,就會認為子模塊被修改了,可以用來覆蓋 git-config[1] 或 gitmodules[5] 中 "忽略 "選項的任何設定。当使用 "untracked "时,当子模块只包含未跟踪的内容时,不被认为是脏的(但它们仍然被扫描为修改的内容)。使用 "dirty "会忽略所有对子模块工作树的修改,只显示存储在超级项目中的提交的修改(这是1.7.0之前的行为)。使用 "all "会隐藏子模块的所有变化(当配置选项`status.submoduleSummary`被设置时,会抑制子模块摘要的输出)。
- --ignored[=<mode>]
-
也显示忽略的文件。
模式参数用于指定对被忽略文件的处理。 它是可选的:默认为 "传统"。
可能的选择是。
-
传统 - 显示被忽略的文件和目录,除非 --untracked-files=all is specified, in which case individual files in ignored directories are displayed.
-
no - 不显示被忽略的文件。
-
matching - 显示忽略的文件和目录,这些文件和目录符合 无视模式。
当指定 "匹配 "模式时,明确匹配忽略模式的路径会被显示。如果一个目录与忽略模式相匹配,那么它就会被显示,但不显示被忽略目录中包含的路径。如果一个目录不匹配忽略模式,但所有内容都被忽略,那么该目录不被显示,但所有内容被显示。
-
- -z
-
用NUL而不是LF来终止条目。 如果没有给出其他格式,这就意味着`--porcelain=v1`的输出格式。
- --column[=<选项>]
- --no-column
-
在列中显示未跟踪的文件。选项语法见配置变量`column.status`。
--column`和
--no-column`没有选项,分别相当于’always’和’never'。 - --ahead-behind
- --no-ahead-behind
-
显示或不显示该分支相对于其上游分支的详细超前/滞后计数。 默认为true。
- --renames
- --no-renames
-
开启/关闭重名检测,不受用户配置影响。 参见git-diff[1]
--no-renames
。 - --find-renames[=<n>]
-
开启重名检测,可选择设置相似度阈值。 参见 git-diff[1]
--find-renames
。 - <pathspec>…
-
参见 gitglossary[7] 中的’pathspec’条目。
OUTPUT
这个命令的输出是用来作为提交模板注释的。 默认的长篇格式是为了让人可读性强、言简意赅和描述性好。 其内容和格式可以随时更改。
与许多其他 Git 命令不同,如果你在子目录中工作,输出中提到的路径是相对于当前目录的(这是故意的,以帮助剪切和粘贴)。参见下面的 status.relativePaths 配置选项。
简短格式
在简短的格式中,每个路径的状态显示为以下形式之一
XY PATH XY ORIG_PATH -> PATH
其中`ORIG_PATH`是重命名/复制的内容的来源。`ORIG_PATH`只有在条目被重命名或复制时才会显示。`XY`是一个双字母的状态代码。
各个字段(包括`→`)之间用一个空格隔开。如果一个文件名包含空白或其他不可打印的字符,该字段将以C语言字符串字面的方式被引用:由ASCII双引号(34)字符包围,内部的特殊字符被反斜线省略。
有三种不同类型的状态是使用这种格式显示的,每一种都以不同的方式使用`XY`语法。
-
当一个合并正在发生并且合并成功时,或者在合并之外 情况,`X`显示索引的状态,`Y`显示工作树的状态。
-
当发生合并冲突且尚未解决时,"X "和 "Y "就会出现。 显示了相对于共同祖先而言,合并的每个头所引入的状态。这些路径被称为_未合并_。
-
当一个路径没有被追踪时,
X`和`Y`总是相同的,因为它们是 未知的索引。
??用于未跟踪的路径。除非使用了
--ignored`,否则不列出被忽略的文件;如果使用了,则用`!!`表示被忽略的文件。
请注意,这里的_merge_也包括使用默认的`--merge`策略的rebases,cherry-pick,以及其他任何使用merge机制的东西。
在下面的表格中,这三个类别分别显示在不同的部分,这些字符用于显示跟踪路径的前两个部分的`X`和`Y`字段。
-
'' = 未修改的
-
M = 修改过的
-
T = file type changed (regular file, symbolic link or submodule)
-
A=添加
-
D = 删除
-
R = 重命名
-
C = copied (if config option status.renames is set to "copies")
-
U=更新但未合并
X Y Meaning ------------------------------------------------- [AMD] not updated M [ MTD] updated in index T [ MTD] type changed in index A [ MTD] added to index D deleted from index R [ MTD] renamed in index C [ MTD] copied in index [MTARC] index and work tree matches [ MTARC] M work tree changed since index [ MTARC] T type changed in work tree since index [ MTARC] D deleted in work tree R renamed in work tree 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比 记录在索引中 m 该子模块有修改的内容 该子模块有未跟踪的文件 因为子模块中的修改内容或未跟踪的文件不能被添加到 通过超级项目中的`git add`来准备提交。
m’和?是递归应用的。例如,如果一个子模块中的嵌套子模块包含一个未跟踪的文件,这也会报告为?
如果使用了-b,短格式的状态前面会有一行
## branchname tracking info
瓷器格式版本1
第1版的瓷器格式与短格式类似,但保证不会在Git版本之间以向后兼容的方式或基于用户配置而改变。这使得它成为脚本解析的理想选择。 上面对短格式的描述也是对瓷器格式的描述,但有一些例外。
-
用户的color.status配置不被尊重,颜色将永远是关闭的。
-
用户的 status.relativePaths 配置不被尊重;显示的路径将总是相对于版本库根目录。
还有一种替代的-z格式,建议用于机器解析。在这种格式中,状态字段是相同的,但其他一些事情发生了变化。 首先,重命名条目中的"->"被省略,字段顺序被颠倒(例如 "from-> to "变成 "to from")。第二,每个文件名后面都有一个NUL(ASCII 0),取代空格作为字段分隔符和终止换行符(但空格仍然将状态字段与第一个文件名分开)。 第三,包含特殊字符的文件名不被特别格式化;不进行引号或反斜线escaping。
任何子模块的变化都被报告为修改的`M',而不是`m’或单一的`?'。
瓷器格式版本2
第二版格式增加了关于工作树的状态和变化的项目的更多详细信息。 第2版还定义了一套可扩展的、易于解析的可选头文件。
标头行以 "#"开头,是为响应特定的命令行参数而添加的。 解析器应该忽略他们不认识的标题。
分支机构负责人
如果给了`--branch`,就会打印出一系列标题行,其中有关于当前分支的信息。
线路说明 ------------------------------------------------------------ # branch.oid <commit> | (初始) 当前的提交。 # branch.head <branch> | (detached) 当前分支。 # branch.upstream <upstream_branch> 如果upstream被设置。 # branch.ab +<ahead> -<behind> 如果上游被设置且 的提交是存在的。 ------------------------------------------------------------
变更后的跟踪条目
在页眉之后,一系列的行被打印出来,用于追踪条目。 根据变化的类型,三种不同的行格式之一可用于描述一个条目。 追踪条目是以未定义的顺序打印的;解析器应允许以任何顺序混合使用这三种行类型。
普通更改的条目有以下格式。
1 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <path>
重命名或复制的条目有以下格式。
2 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <X><score> <path><sep><origPath>
领域含义 -------------------------------------------------------- <XY> 一个2个字符的字段,包含短格式中描述的阶段性和非阶段性XY值。 阶段性和非阶段性的XY值。 不变的用". "表示,而不是用空格。 而不是空格。 <sub> 一个4个字符的字段,描述子模块的状态。 "N... "当条目不是一个子模块时。 "S<c><m><u>" 当条目是一个子模块。 <c>是 "C",如果提交改变了;否则是"."。 <m> 如果它有跟踪的变化,则为 "M";否则为"."。 <u> 如果有未追踪的修改,则为 "U";否则为"."。 <mH> HEAD中的八进制文件模式。 <mI> 索引中的八进制文件模式。 <mW> 工作树中的八进制文件模式。 <hH> HEAD中的对象名称。 <hI> 索引中的对象名称。 <X><score> 重命名或复制分数(表示源文件和目标文件之间的相似百分比)。 源和目标之间的相似度)。 移动或复制的目标之间的相似度)。)例如,"R100 "或 "C75"。 <path> 路径名。 在一个重命名/复制的条目中,这 是目标路径。 <sep> 当使用`-z`选项时,两个路径名用NUL(ASCII 0x00)分隔。 用一个NUL(ASCII 0x00)字节分开;否则,用一个TAB(ASCII 0x09) 字节来分隔它们。 <origPath> 在HEAD或索引中提交的路径名。 这只存在于重命名/复制的条目中,并且 告诉你重命名/复制的内容来自哪里。 --------------------------------------------------------
未合并的条目有以下格式;第一个字符是 "u",以区别于普通的变更条目。
u <XY> <sub> <m1> <m2> <m3> <mW> <h1> <h2> <h3> <path>
领域含义 -------------------------------------------------------- <XY> 一个2个字符的字段,描述冲突类型 描述冲突类型。 <sub> 一个4个字符的字段,描述子模块的状态 如上所述。 <m1> 阶段1中的八进制文件模式。 <m2> 阶段2中的八进制文件模式。 <m3> 阶段3中的八进制文件模式。 <mW> 工作树中的八进制文件模式。 <h1> 阶段1中的对象名称。 <h2> 第二阶段的对象名称。 <h3> 第三阶段的对象名称。 <path> 路径名。 --------------------------------------------------------
路径名格式说明和-z
当给定"-z "选项时,路径名将按原样打印,没有任何引号,并且以NUL(ASCII 0x00)字节结束行。
如果没有`-z`选项,带有 "不寻常 "字符的路径名将被引用,正如对配置变量`core.quotePath`的解释(见git-config[1])。
配置
该命令使用`color.status`(或`status.color`--它们的意思是一样的,为了向后兼容,保留后者)和`color.status.<slot>`配置变量来为其输出着色。
如果配置变量`status.relativePaths`被设置为false,那么所有显示的路径都是相对于版本库根目录的,而不是当前目录。
如果`status.submoduleSummary`被设置为一个非零的数字或true(与-1或无限制的数字相同),子模块摘要将启用长格式,并显示修改的子模块的提交摘要(见git-submodule[1]的-summary-limit选项)。请注意,当`diff.ignoreSubmodules`被设置为’all’或仅为那些`submodule.<name>.ignore=all’的子模块,状态命令的摘要输出将被抑制。要查看被忽略的子模块的摘要,你可以使用 --ignore-submodules=dirty 命令行选项或 "git submodule summary "命令,它显示类似的输出,但不尊重这些设置。
背景刷新
默认情况下,git status`会自动刷新索引,更新工作树上缓存的状态信息,并将结果写出来。写出更新的索引是一种优化,严格来说并无必要(`status`为自己计算数值,但写出它们只是为了避免后续程序重复我们的计算)。当`status`在后台运行时,在写入过程中持有的锁可能与其他同时进行的进程发生冲突,导致它们失败。在后台运行`status`的脚本应该考虑使用`git --no-optional-locks status
(详见git[1])。
GIT
Part of the git[1] suite