Documentation / git-status.txton commit git-status.txt: advertisement for untracked cache (aeb6f8b)
   1git-status(1)
   2=============
   3
   4NAME
   5----
   6git-status - Show the working tree status
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git status' [<options>...] [--] [<pathspec>...]
  13
  14DESCRIPTION
  15-----------
  16Displays paths that have differences between the index file and the
  17current HEAD commit, paths that have differences between the working
  18tree and the index file, and paths in the working tree that are not
  19tracked by Git (and are not ignored by linkgit:gitignore[5]). The first
  20are what you _would_ commit by running `git commit`; the second and
  21third are what you _could_ commit by running 'git add' before running
  22`git commit`.
  23
  24OPTIONS
  25-------
  26
  27-s::
  28--short::
  29        Give the output in the short-format.
  30
  31-b::
  32--branch::
  33        Show the branch and tracking info even in short-format.
  34
  35--porcelain::
  36        Give the output in an easy-to-parse format for scripts.
  37        This is similar to the short output, but will remain stable
  38        across Git versions and regardless of user configuration. See
  39        below for details.
  40
  41--long::
  42        Give the output in the long-format. This is the default.
  43
  44-u[<mode>]::
  45--untracked-files[=<mode>]::
  46        Show untracked files.
  47+
  48The mode parameter is optional (defaults to 'all'), and is used to
  49specify the handling of untracked files.
  50+
  51The possible options are:
  52+
  53        - 'no'     - Show no untracked files.
  54        - 'normal' - Shows untracked files and directories.
  55        - 'all'    - Also shows individual files in untracked directories.
  56+
  57When `-u` option is not used, untracked files and directories are
  58shown (i.e. the same as specifying `normal`), to help you avoid
  59forgetting to add newly created files.  Because it takes extra work
  60to find untracked files in the filesystem, this mode may take some
  61time in a large working tree.
  62Consider enabling untracked cache and split index if supported (see
  63`git update-index --untracked-cache` and `git update-index
  64--split-index`), Otherwise you can use `no` to have `git status`
  65return more quickly without showing untracked files.
  66+
  67The default can be changed using the status.showUntrackedFiles
  68configuration variable documented in linkgit:git-config[1].
  69
  70--ignore-submodules[=<when>]::
  71        Ignore changes to submodules when looking for changes. <when> can be
  72        either "none", "untracked", "dirty" or "all", which is the default.
  73        Using "none" will consider the submodule modified when it either contains
  74        untracked or modified files or its HEAD differs from the commit recorded
  75        in the superproject and can be used to override any settings of the
  76        'ignore' option in linkgit:git-config[1] or linkgit:gitmodules[5]. When
  77        "untracked" is used submodules are not considered dirty when they only
  78        contain untracked content (but they are still scanned for modified
  79        content). Using "dirty" ignores all changes to the work tree of submodules,
  80        only changes to the commits stored in the superproject are shown (this was
  81        the behavior before 1.7.0). Using "all" hides all changes to submodules
  82        (and suppresses the output of submodule summaries when the config option
  83        `status.submodulesummary` is set).
  84
  85--ignored::
  86        Show ignored files as well.
  87
  88-z::
  89        Terminate entries with NUL, instead of LF.  This implies
  90        the `--porcelain` output format if no other format is given.
  91
  92--column[=<options>]::
  93--no-column::
  94        Display untracked files in columns. See configuration variable
  95        column.status for option syntax.`--column` and `--no-column`
  96        without options are equivalent to 'always' and 'never'
  97        respectively.
  98
  99
 100OUTPUT
 101------
 102The output from this command is designed to be used as a commit
 103template comment.
 104The default, long format, is designed to be human readable,
 105verbose and descriptive.  Its contents and format are subject to change
 106at any time.
 107
 108The paths mentioned in the output, unlike many other Git commands, are
 109made relative to the current directory if you are working in a
 110subdirectory (this is on purpose, to help cutting and pasting). See
 111the status.relativePaths config option below.
 112
 113Short Format
 114~~~~~~~~~~~~
 115
 116In the short-format, the status of each path is shown as
 117
 118        XY PATH1 -> PATH2
 119
 120where `PATH1` is the path in the `HEAD`, and the " `-> PATH2`" part is
 121shown only when `PATH1` corresponds to a different path in the
 122index/worktree (i.e. the file is renamed). The `XY` is a two-letter
 123status code.
 124
 125The fields (including the `->`) are separated from each other by a
 126single space. If a filename contains whitespace or other nonprintable
 127characters, that field will be quoted in the manner of a C string
 128literal: surrounded by ASCII double quote (34) characters, and with
 129interior special characters backslash-escaped.
 130
 131For paths with merge conflicts, `X` and `Y` show the modification
 132states of each side of the merge. For paths that do not have merge
 133conflicts, `X` shows the status of the index, and `Y` shows the status
 134of the work tree.  For untracked paths, `XY` are `??`.  Other status
 135codes can be interpreted as follows:
 136
 137* ' ' = unmodified
 138* 'M' = modified
 139* 'A' = added
 140* 'D' = deleted
 141* 'R' = renamed
 142* 'C' = copied
 143* 'U' = updated but unmerged
 144
 145Ignored files are not listed, unless `--ignored` option is in effect,
 146in which case `XY` are `!!`.
 147
 148    X          Y     Meaning
 149    -------------------------------------------------
 150              [MD]   not updated
 151    M        [ MD]   updated in index
 152    A        [ MD]   added to index
 153    D         [ M]   deleted from index
 154    R        [ MD]   renamed in index
 155    C        [ MD]   copied in index
 156    [MARC]           index and work tree matches
 157    [ MARC]     M    work tree changed since index
 158    [ MARC]     D    deleted in work tree
 159    -------------------------------------------------
 160    D           D    unmerged, both deleted
 161    A           U    unmerged, added by us
 162    U           D    unmerged, deleted by them
 163    U           A    unmerged, added by them
 164    D           U    unmerged, deleted by us
 165    A           A    unmerged, both added
 166    U           U    unmerged, both modified
 167    -------------------------------------------------
 168    ?           ?    untracked
 169    !           !    ignored
 170    -------------------------------------------------
 171
 172If -b is used the short-format status is preceded by a line
 173
 174## branchname tracking info
 175
 176Porcelain Format
 177~~~~~~~~~~~~~~~~
 178
 179The porcelain format is similar to the short format, but is guaranteed
 180not to change in a backwards-incompatible way between Git versions or
 181based on user configuration. This makes it ideal for parsing by scripts.
 182The description of the short format above also describes the porcelain
 183format, with a few exceptions:
 184
 1851. The user's color.status configuration is not respected; color will
 186   always be off.
 187
 1882. The user's status.relativePaths configuration is not respected; paths
 189   shown will always be relative to the repository root.
 190
 191There is also an alternate -z format recommended for machine parsing. In
 192that format, the status field is the same, but some other things
 193change.  First, the '\->' is omitted from rename entries and the field
 194order is reversed (e.g 'from \-> to' becomes 'to from'). Second, a NUL
 195(ASCII 0) follows each filename, replacing space as a field separator
 196and the terminating newline (but a space still separates the status
 197field from the first filename).  Third, filenames containing special
 198characters are not specially formatted; no quoting or
 199backslash-escaping is performed.
 200
 201CONFIGURATION
 202-------------
 203
 204The command honors `color.status` (or `status.color` -- they
 205mean the same thing and the latter is kept for backward
 206compatibility) and `color.status.<slot>` configuration variables
 207to colorize its output.
 208
 209If the config variable `status.relativePaths` is set to false, then all
 210paths shown are relative to the repository root, not to the current
 211directory.
 212
 213If `status.submodulesummary` is set to a non zero number or true (identical
 214to -1 or an unlimited number), the submodule summary will be enabled for
 215the long format and a summary of commits for modified submodules will be
 216shown (see --summary-limit option of linkgit:git-submodule[1]). Please note
 217that the summary output from the status command will be suppressed for all
 218submodules when `diff.ignoreSubmodules` is set to 'all' or only for those
 219submodules where `submodule.<name>.ignore=all`. To also view the summary for
 220ignored submodules you can either use the --ignore-submodules=dirty command
 221line option or the 'git submodule summary' command, which shows a similar
 222output but does not honor these settings.
 223
 224SEE ALSO
 225--------
 226linkgit:gitignore[5]
 227
 228GIT
 229---
 230Part of the linkgit:git[1] suite