• git-status
    • 名称
    • 概要
    • 描述
    • OPTIONS
    • OUTPUT
      • 短格式
      • 瓷器版本1
      • 瓷器版本2
      • 分支标题
      • 更改了跟踪条目
      • 其他项目
      • 路径名格式注释和-z
    • 组态
    • 背景刷新
    • 也可以看看
    • GIT

    git-status

    原文: https://git-scm.com/docs/git-status

    名称

    git-status - 显示工作树状态

    概要

    1. git status [<options>…​] [--] [<pathspec>…​]

    描述

    显示索引文件与当前HEAD提交之间存在差异的路径,工作树与索引文件之间存在差异的路径,以及工作树中未由Git跟踪的路径( gitignore不会忽略这些路径[5] )。第一个是你通过运行git commit提交的内容;第二个和第三个是你可以通过在运行git commit之前运行 _git add 来提交_。

    OPTIONS

    1. -s
    1. --short

    以短格式输出。

    1. -b
    1. --branch

    即使是短格式显示分支和跟踪信息。

    1. --show-stash

    显示当前隐藏的条目数。

    1. --porcelain[=<version>]

    以易于解析的格式为脚本提供输出。这类似于短输出,但在Git版本中保持稳定,无论用户配置如何。请参阅下文了解详情。

    version参数用于指定格式版本。这是可选的,默认为原始版本 v1 格式。

    1. --long

    以长格式输出。这是默认值。

    1. -v
    1. --verbose

    除了已更改的文件的名称之外,还显示要提交的文本更改(即,类似于git diff --cached的输出)。如果指定-v两次,则还显示工作树中尚未暂存的更改(即,类似于git diff的输出)。

    1. -u[<mode>]
    1. --untracked-files[=<mode>]

    显示未跟踪的文件。

    mode参数用于指定未跟踪文件的处理。它是可选的:它默认为所有,如果指定,它必须粘在选项上(例如-uno,但不是-u no)。

    可能的选择是:

    • 没有 - 显示没有未跟踪的文件。

    • 正常 - 显示未跟踪的文件和目录。

    • 全部 - 还显示未跟踪目录中的单个文件。

    如果未使用-u选项,则会显示未跟踪的文件和目录(即与指定normal相同),以帮助您避免忘记添加新创建的文件。由于在文件系统中查找未跟踪文件需要额外的工作,因此在大型工作树中此模式可能需要一些时间。如果支持,请考虑启用未跟踪的缓存和拆分索引(请参阅git update-index --untracked-cachegit update-index --split-index),否则您可以使用nogit status更快地返回,而不显示未跟踪的文件。

    可以使用 git-config [1] 中记录的status.showUntrackedFiles配置变量更改默认值。

    1. --ignore-submodules[=<when>]

    在查找更改时忽略对子模块的更改。 <当>可以是“none”,“untracked”,“dirty”或“all”,这是默认值。使用“none”时,如果子模块包含未跟踪或修改的文件,或者其HEAD与超级项目中记录的提交不同,则可以使用“无”来修改子模块,并可用于覆盖中 ignore 选项的任何设置git-config [1] 或 gitmodules [5] 。当使用“未跟踪”时,如果子模块仅包含未跟踪的内容(但仍会扫描修改的内容),则子模块不会被视为脏。使用“脏”忽略对子模块工作树的所有更改,仅显示存储在超级项目中的提交的更改(这是1.7.0之前的行为)。使用“all”隐藏对子模块的所有更改(并在设置配置选项status.submoduleSummary时禁止子模块摘要的输出)。

    1. --ignored[=<mode>]

    同时显示被忽略的文件。

    mode参数用于指定忽略文件的处理。它是可选的:它默认为传统

    可能的选择是:

    • traditional - 显示被忽略的文件和目录,除非指定了—untracked-files = all,在这种情况下,将显示被忽略目录中的单个文件。

    • 没有 - 显示没有被忽略的文件。

    • 匹配 - 显示与忽略模式匹配的被忽略的文件和目录。

    当指定匹配模式时,将显示与忽略模式明确匹配的路径。如果目录与忽略模式匹配,则会显示该目录,但不会显示忽略目录中包含的路径。如果目录与忽略模式不匹配,但忽略了所有内容,则不显示该目录,但会显示所有内容。

    1. -z

    用NUL而不是LF终止条目。如果没有给出其他格式,这意味着--porcelain=v1输出格式。

    1. --column[=<options>]
    1. --no-column

    在列中显示未跟踪的文件。有关选项语法,请参阅配置变量column.status。没有选项的--column--no-column分别相当于和永远不会

    1. --ahead-behind
    1. --no-ahead-behind

    显示或不显示分支相对于其上游分支的详细前/后计数。默认为true。

    1. --renames
    1. --no-renames

    无论用户配置如何,都可以打开/关闭重命名检测。另见 git-diff [1] --no-renames

    1. --find-renames[=<n>]

    打开重命名检测,可选择设置相似性阈值。另见 git-diff [1] --find-renames

    1. <pathspec>…​

    参见 gitglossary [7] 中的 pathspec 条目。

    OUTPUT

    此命令的输出旨在用作提交模板注释。默认的长格式设计为人类可读,详细和描述性。其内容和格式随时可能更改。

    与许多其他Git命令不同,输出中提到的路径是相对于当前目录的,如果您在子目录中工作(这是故意的,以帮助剪切和粘贴)。请参阅下面的status.relativePaths配置选项。

    短格式

    在短格式中,每个路径的状态显示为这些形式之一

    1. XY PATH
    2. XY ORIG_PATH -> PATH

    其中ORIG_PATH是重命名/复制内容的来源。只有在重命名或复制条目时才会显示ORIG_PATHXY是一个双字母状态代码。

    字段(包括-&gt;)通过单个空格彼此分开。如果文件名包含空格或其他不可打印的字符,则该字段将以C字符串文字的方式引用:由ASCII双引号(34)字符包围,并使用内部特殊字符反斜杠转义。

    对于具有合并冲突的路径,XY显示合并每一侧的修改状态。对于没有合并冲突的路径,X显示索引的状态,Y显示工作树的状态。对于未跟踪路径,XY??。其他状态代码可以解释如下:

    • ‘’=未经修改

    • M =修改

    • A =已添加

    • D =已删除

    • R =重命名

    • C =复制

    • U =已更新但未合并

    除非--ignored选项生效,否则不会列出忽略的文件,在这种情况下,XY!!

    1. X Y Meaning
    2. -------------------------------------------------
    3. [AMD] not updated
    4. M [ MD] updated in index
    5. A [ MD] added to index
    6. D deleted from index
    7. R [ MD] renamed in index
    8. C [ MD] copied in index
    9. [MARC] index and work tree matches
    10. [ MARC] M work tree changed since index
    11. [ MARC] D deleted in work tree
    12. [ D] R renamed in work tree
    13. [ D] C copied in work tree
    14. -------------------------------------------------
    15. D D unmerged, both deleted
    16. A U unmerged, added by us
    17. U D unmerged, deleted by them
    18. U A unmerged, added by them
    19. D U unmerged, deleted by us
    20. A A unmerged, both added
    21. U U unmerged, both modified
    22. -------------------------------------------------
    23. ? ? untracked
    24. ! ! ignored
    25. -------------------------------------------------

    子模块具有更多状态,而是报告M子模块具有与子模块中已修改内容的索引中记录的HEAD不同的HEAD?子模块具有未跟踪的文件,因为子模块中的修改内容或未跟踪文件无法通过超级项目中的git add添加以准备提交。

    m 递归应用。例如,如果子模块中的嵌套子模块包含未跟踪的文件,则报告为 也是如此。

    如果使用-b,则短格式状态前面有一行

    1. ## branchname tracking info

    瓷器版本1

    版本1瓷器格式类似于短格式,但保证不会在Git版本之间以向后兼容的方式或基于用户配置进行更改。这使其成为脚本解析的理想选择。上面简短格式的描述也描述了瓷器格式,但有一些例外:

    1. 用户的color.status配置不受尊重;颜色永远都会关闭。

    2. 不尊重用户的status.relativePaths配置;显示的路径始终相对于存储库根目录。

    还有一种备用-z格式建议用于机器解析。在该格式中,状态字段是相同的,但其他一些事情会发生变化。首先, - >从重命名条目中省略并且字段顺序被反转(例如,从 - >到变为)。其次,NUL(ASCII 0)跟在每个文件名后面,将空格替换为字段分隔符和终止换行符(但空格仍然将状态字段与第一个文件名分开)。第三,包含特殊字符的文件名不是特殊格式的;不执行引用或反斜杠转义。

    任何子模块更改都会报告为已修改M而不是m或单个?

    瓷器版本2

    版本2格式添加有关工作树状态和更改项目的更多详细信息。版本2还定义了一组易于解析的可扩展可选标头。

    标题行以“#”开头,​​并添加以响应特定的命令行参数。解析器应该忽略它们无法识别的标头。

    分支标题

    如果给出--branch,则打印一系列标题行,其中包含有关当前分支的信息。

    1. Line Notes
    2. ------------------------------------------------------------
    3. # branch.oid <commit> | (initial) Current commit.
    4. # branch.head <branch> | (detached) Current branch.
    5. # branch.upstream <upstream_branch> If upstream is set.
    6. # branch.ab +<ahead> -<behind> If upstream is set and
    7. the commit is present.
    8. ------------------------------------------------------------

    更改了跟踪条目

    在标题之后,为跟踪的条目打印一系列行。可以使用三种不同线格式中的一种来根据变化的类型来描述条目。跟踪的条目以未定义的顺序打印;解析器应允许以任何顺序混合使用3种线型。

    普通更改的条目具有以下格式:

    1. 1 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <path>

    重命名或复制的条目具有以下格式:

    1. 2 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <X><score> <path><sep><origPath>
    1. Field Meaning
    2. --------------------------------------------------------
    3. <XY> A 2 character field containing the staged and
    4. unstaged XY values described in the short format,
    5. with unchanged indicated by a "." rather than
    6. a space.
    7. <sub> A 4 character field describing the submodule state.
    8. "N..." when the entry is not a submodule.
    9. "S<c><m><u>" when the entry is a submodule.
    10. <c> is "C" if the commit changed; otherwise ".".
    11. <m> is "M" if it has tracked changes; otherwise ".".
    12. <u> is "U" if there are untracked changes; otherwise ".".
    13. <mH> The octal file mode in HEAD.
    14. <mI> The octal file mode in the index.
    15. <mW> The octal file mode in the worktree.
    16. <hH> The object name in HEAD.
    17. <hI> The object name in the index.
    18. <X><score> The rename or copy score (denoting the percentage
    19. of similarity between the source and target of the
    20. move or copy). For example "R100" or "C75".
    21. <path> The pathname. In a renamed/copied entry, this
    22. is the target path.
    23. <sep> When the `-z` option is used, the 2 pathnames are separated
    24. with a NUL (ASCII 0x00) byte; otherwise, a tab (ASCII 0x09)
    25. byte separates them.
    26. <origPath> The pathname in the commit at HEAD or in the index.
    27. This is only present in a renamed/copied entry, and
    28. tells where the renamed/copied contents came from.
    29. --------------------------------------------------------

    未合并的条目具有以下格式;第一个字符是“u”,用于区分普通的更改条目。

    1. u <xy> <sub> <m1> <m2> <m3> <mW> <h1> <h2> <h3> <path>
    1. Field Meaning
    2. --------------------------------------------------------
    3. <XY> A 2 character field describing the conflict type
    4. as described in the short format.
    5. <sub> A 4 character field describing the submodule state
    6. as described above.
    7. <m1> The octal file mode in stage 1.
    8. <m2> The octal file mode in stage 2.
    9. <m3> The octal file mode in stage 3.
    10. <mW> The octal file mode in the worktree.
    11. <h1> The object name in stage 1.
    12. <h2> The object name in stage 2.
    13. <h3> The object name in stage 3.
    14. <path> The pathname.
    15. --------------------------------------------------------

    其他项目

    跟踪条目(如果需要),将打印一系列未跟踪的行,然后忽略在工作树中找到的项目。

    未跟踪的项目具有以下格式:

    1. ? <path>

    忽略的项目具有以下格式:

    1. ! <path>

    路径名格式注释和-z

    当给出-z选项时,路径名按原样打印,没有任何引号,行以NUL(ASCII 0x00)字节终止。

    如果没有-z选项,则会引用具有“异常”字符的路径名,如配置变量core.quotePath所述(参见 git-config [1] )。

    组态

    该命令符合color.status(或status.color - 它们的含义相同,后者保持向后兼容性)和color.status.&lt;slot&gt;配置变量以使其输出着色。

    如果config变量status.relativePaths设置为false,则显示的所有路径都相对于存储库根目录,而不是当前目录。

    如果status.submoduleSummary设置为非零数字或为真(与-1或无限数字相同),则将为长格式启用子模块摘要,并显示已修改子模块的提交摘要(请参阅—summary git-submodule [1] 的限制选项。请注意,当diff.ignoreSubmodules设置为 all 时,或者仅对于那些submodule.&lt;name&gt;.ignore=all的子模块,将禁止所有子模块的status命令的摘要输出。要查看被忽略的子模块的摘要,您可以使用—ignore-submodules = dirty命令行选项或 git子模块摘要命令,该命令显示类似的输出但不遵循这些设置。

    背景刷新

    默认情况下,git status将自动刷新索引,从工作树更新缓存的统计信息并写出结果。写出更新的索引是一种并非严格必要的优化(status计算自身的值,但将它们写出来只是为了保存后续程序不重复我们的计算)。当status在后台运行时,写入期间保持的锁定可能与其他同时进程冲突,导致它们失败。在后台运行status的脚本应考虑使用git --no-optional-locks status(详见 git [1] )。

    也可以看看

    gitignore [5]

    GIT

    部分 git [1] 套件