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