Documentation / git-status.txton commit rev-parse --parseopt: add the --stuck-long mode (f8c8721)
   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.  You can use `no` to have `git status`
  62return more quickly without showing untracked files.
  63+
  64The default can be changed using the status.showUntrackedFiles
  65configuration variable documented in linkgit:git-config[1].
  66
  67--ignore-submodules[=<when>]::
  68        Ignore changes to submodules when looking for changes. <when> can be
  69        either "none", "untracked", "dirty" or "all", which is the default.
  70        Using "none" will consider the submodule modified when it either contains
  71        untracked or modified files or its HEAD differs from the commit recorded
  72        in the superproject and can be used to override any settings of the
  73        'ignore' option in linkgit:git-config[1] or linkgit:gitmodules[5]. When
  74        "untracked" is used submodules are not considered dirty when they only
  75        contain untracked content (but they are still scanned for modified
  76        content). Using "dirty" ignores all changes to the work tree of submodules,
  77        only changes to the commits stored in the superproject are shown (this was
  78        the behavior before 1.7.0). Using "all" hides all changes to submodules
  79        (and suppresses the output of submodule summaries when the config option
  80        `status.submodulesummary` is set).
  81
  82--ignored::
  83        Show ignored files as well.
  84
  85-z::
  86        Terminate entries with NUL, instead of LF.  This implies
  87        the `--porcelain` output format if no other format is given.
  88
  89--column[=<options>]::
  90--no-column::
  91        Display untracked files in columns. See configuration variable
  92        column.status for option syntax.`--column` and `--no-column`
  93        without options are equivalent to 'always' and 'never'
  94        respectively.
  95
  96
  97OUTPUT
  98------
  99The output from this command is designed to be used as a commit
 100template comment, and all the output lines are prefixed with '#'.
 101The default, long format, is designed to be human readable,
 102verbose and descriptive.  Its contents and format are subject to change
 103at any time.
 104
 105The paths mentioned in the output, unlike many other Git commands, are
 106made relative to the current directory if you are working in a
 107subdirectory (this is on purpose, to help cutting and pasting). See
 108the status.relativePaths config option below.
 109
 110Short Format
 111~~~~~~~~~~~~
 112
 113In the short-format, the status of each path is shown as
 114
 115        XY PATH1 -> PATH2
 116
 117where `PATH1` is the path in the `HEAD`, and the " `-> PATH2`" part is
 118shown only when `PATH1` corresponds to a different path in the
 119index/worktree (i.e. the file is renamed). The 'XY' is a two-letter
 120status code.
 121
 122The fields (including the `->`) are separated from each other by a
 123single space. If a filename contains whitespace or other nonprintable
 124characters, that field will be quoted in the manner of a C string
 125literal: surrounded by ASCII double quote (34) characters, and with
 126interior special characters backslash-escaped.
 127
 128For paths with merge conflicts, `X` and 'Y' show the modification
 129states of each side of the merge. For paths that do not have merge
 130conflicts, `X` shows the status of the index, and `Y` shows the status
 131of the work tree.  For untracked paths, `XY` are `??`.  Other status
 132codes can be interpreted as follows:
 133
 134* ' ' = unmodified
 135* 'M' = modified
 136* 'A' = added
 137* 'D' = deleted
 138* 'R' = renamed
 139* 'C' = copied
 140* 'U' = updated but unmerged
 141
 142Ignored files are not listed, unless `--ignored` option is in effect,
 143in which case `XY` are `!!`.
 144
 145    X          Y     Meaning
 146    -------------------------------------------------
 147              [MD]   not updated
 148    M        [ MD]   updated in index
 149    A        [ MD]   added to index
 150    D         [ M]   deleted from index
 151    R        [ MD]   renamed in index
 152    C        [ MD]   copied in index
 153    [MARC]           index and work tree matches
 154    [ MARC]     M    work tree changed since index
 155    [ MARC]     D    deleted in work tree
 156    -------------------------------------------------
 157    D           D    unmerged, both deleted
 158    A           U    unmerged, added by us
 159    U           D    unmerged, deleted by them
 160    U           A    unmerged, added by them
 161    D           U    unmerged, deleted by us
 162    A           A    unmerged, both added
 163    U           U    unmerged, both modified
 164    -------------------------------------------------
 165    ?           ?    untracked
 166    !           !    ignored
 167    -------------------------------------------------
 168
 169If -b is used the short-format status is preceded by a line
 170
 171## branchname tracking info
 172
 173Porcelain Format
 174~~~~~~~~~~~~~~~~
 175
 176The porcelain format is similar to the short format, but is guaranteed
 177not to change in a backwards-incompatible way between Git versions or
 178based on user configuration. This makes it ideal for parsing by scripts.
 179The description of the short format above also describes the porcelain
 180format, with a few exceptions:
 181
 1821. The user's color.status configuration is not respected; color will
 183   always be off.
 184
 1852. The user's status.relativePaths configuration is not respected; paths
 186   shown will always be relative to the repository root.
 187
 188There is also an alternate -z format recommended for machine parsing. In
 189that format, the status field is the same, but some other things
 190change.  First, the '\->' is omitted from rename entries and the field
 191order is reversed (e.g 'from \-> to' becomes 'to from'). Second, a NUL
 192(ASCII 0) follows each filename, replacing space as a field separator
 193and the terminating newline (but a space still separates the status
 194field from the first filename).  Third, filenames containing special
 195characters are not specially formatted; no quoting or
 196backslash-escaping is performed.
 197
 198CONFIGURATION
 199-------------
 200
 201The command honors `color.status` (or `status.color` -- they
 202mean the same thing and the latter is kept for backward
 203compatibility) and `color.status.<slot>` configuration variables
 204to colorize its output.
 205
 206If the config variable `status.relativePaths` is set to false, then all
 207paths shown are relative to the repository root, not to the current
 208directory.
 209
 210If `status.submodulesummary` is set to a non zero number or true (identical
 211to -1 or an unlimited number), the submodule summary will be enabled for
 212the long format and a summary of commits for modified submodules will be
 213shown (see --summary-limit option of linkgit:git-submodule[1]). Please note
 214that the summary output from the status command will be suppressed for all
 215submodules when `diff.ignoreSubmodules` is set to 'all' or only for those
 216submodules where `submodule.<name>.ignore=all`. To also view the summary for
 217ignored submodules you can either use the --ignore-submodules=dirty command
 218line option or the 'git submodule summary' command, which shows a similar
 219output but does not honor these settings.
 220
 221SEE ALSO
 222--------
 223linkgit:gitignore[5]
 224
 225GIT
 226---
 227Part of the linkgit:git[1] suite