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