Documentation / git-status.txton commit wrapper.c: add and use fopen_or_warn() (e9d983f)
   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[=<version>]::
  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+
  41The version parameter is used to specify the format version.
  42This is optional and defaults to the original version 'v1' format.
  43
  44--long::
  45        Give the output in the long-format. This is the default.
  46
  47-v::
  48--verbose::
  49        In addition to the names of files that have been changed, also
  50        show the textual changes that are staged to be committed
  51        (i.e., like the output of `git diff --cached`). If `-v` is specified
  52        twice, then also show the changes in the working tree that
  53        have not yet been staged (i.e., like the output of `git diff`).
  54
  55-u[<mode>]::
  56--untracked-files[=<mode>]::
  57        Show untracked files.
  58+
  59The mode parameter is used to specify the handling of untracked files.
  60It is optional: it defaults to 'all', and if specified, it must be
  61stuck to the option (e.g. `-uno`, but not `-u no`).
  62+
  63The possible options are:
  64+
  65        - 'no'     - Show no untracked files.
  66        - 'normal' - Shows untracked files and directories.
  67        - 'all'    - Also shows individual files in untracked directories.
  68+
  69When `-u` option is not used, untracked files and directories are
  70shown (i.e. the same as specifying `normal`), to help you avoid
  71forgetting to add newly created files.  Because it takes extra work
  72to find untracked files in the filesystem, this mode may take some
  73time in a large working tree.
  74Consider enabling untracked cache and split index if supported (see
  75`git update-index --untracked-cache` and `git update-index
  76--split-index`), Otherwise you can use `no` to have `git status`
  77return more quickly without showing untracked files.
  78+
  79The default can be changed using the status.showUntrackedFiles
  80configuration variable documented in linkgit:git-config[1].
  81
  82--ignore-submodules[=<when>]::
  83        Ignore changes to submodules when looking for changes. <when> can be
  84        either "none", "untracked", "dirty" or "all", which is the default.
  85        Using "none" will consider the submodule modified when it either contains
  86        untracked or modified files or its HEAD differs from the commit recorded
  87        in the superproject and can be used to override any settings of the
  88        'ignore' option in linkgit:git-config[1] or linkgit:gitmodules[5]. When
  89        "untracked" is used submodules are not considered dirty when they only
  90        contain untracked content (but they are still scanned for modified
  91        content). Using "dirty" ignores all changes to the work tree of submodules,
  92        only changes to the commits stored in the superproject are shown (this was
  93        the behavior before 1.7.0). Using "all" hides all changes to submodules
  94        (and suppresses the output of submodule summaries when the config option
  95        `status.submoduleSummary` is set).
  96
  97--ignored::
  98        Show ignored files as well.
  99
 100-z::
 101        Terminate entries with NUL, instead of LF.  This implies
 102        the `--porcelain=v1` output format if no other format is given.
 103
 104--column[=<options>]::
 105--no-column::
 106        Display untracked files in columns. See configuration variable
 107        column.status for option syntax.`--column` and `--no-column`
 108        without options are equivalent to 'always' and 'never'
 109        respectively.
 110
 111
 112OUTPUT
 113------
 114The output from this command is designed to be used as a commit
 115template comment.
 116The default, long format, is designed to be human readable,
 117verbose and descriptive.  Its contents and format are subject to change
 118at any time.
 119
 120The paths mentioned in the output, unlike many other Git commands, are
 121made relative to the current directory if you are working in a
 122subdirectory (this is on purpose, to help cutting and pasting). See
 123the status.relativePaths config option below.
 124
 125Short Format
 126~~~~~~~~~~~~
 127
 128In the short-format, the status of each path is shown as
 129
 130        XY PATH1 -> PATH2
 131
 132where `PATH1` is the path in the `HEAD`, and the " `-> PATH2`" part is
 133shown only when `PATH1` corresponds to a different path in the
 134index/worktree (i.e. the file is renamed). The `XY` is a two-letter
 135status code.
 136
 137The fields (including the `->`) are separated from each other by a
 138single space. If a filename contains whitespace or other nonprintable
 139characters, that field will be quoted in the manner of a C string
 140literal: surrounded by ASCII double quote (34) characters, and with
 141interior special characters backslash-escaped.
 142
 143For paths with merge conflicts, `X` and `Y` show the modification
 144states of each side of the merge. For paths that do not have merge
 145conflicts, `X` shows the status of the index, and `Y` shows the status
 146of the work tree.  For untracked paths, `XY` are `??`.  Other status
 147codes can be interpreted as follows:
 148
 149* ' ' = unmodified
 150* 'M' = modified
 151* 'A' = added
 152* 'D' = deleted
 153* 'R' = renamed
 154* 'C' = copied
 155* 'U' = updated but unmerged
 156
 157Ignored files are not listed, unless `--ignored` option is in effect,
 158in which case `XY` are `!!`.
 159
 160    X          Y     Meaning
 161    -------------------------------------------------
 162              [MD]   not updated
 163    M        [ MD]   updated in index
 164    A        [ MD]   added to index
 165    D         [ M]   deleted from index
 166    R        [ MD]   renamed in index
 167    C        [ MD]   copied in index
 168    [MARC]           index and work tree matches
 169    [ MARC]     M    work tree changed since index
 170    [ MARC]     D    deleted in work tree
 171    -------------------------------------------------
 172    D           D    unmerged, both deleted
 173    A           U    unmerged, added by us
 174    U           D    unmerged, deleted by them
 175    U           A    unmerged, added by them
 176    D           U    unmerged, deleted by us
 177    A           A    unmerged, both added
 178    U           U    unmerged, both modified
 179    -------------------------------------------------
 180    ?           ?    untracked
 181    !           !    ignored
 182    -------------------------------------------------
 183
 184Submodules have more state and instead report
 185                M    the submodule has a different HEAD than
 186                     recorded in the index
 187                m    the submodule has modified content
 188                ?    the submodule has untracked files
 189since modified content or untracked files in a submodule cannot be added
 190via `git add` in the superproject to prepare a commit.
 191
 192'm' and '?' are applied recursively. For example if a nested submodule
 193in a submodule contains an untracked file, this is reported as '?' as well.
 194
 195If -b is used the short-format status is preceded by a line
 196
 197    ## branchname tracking info
 198
 199Porcelain Format Version 1
 200~~~~~~~~~~~~~~~~~~~~~~~~~~
 201
 202Version 1 porcelain format is similar to the short format, but is guaranteed
 203not to change in a backwards-incompatible way between Git versions or
 204based on user configuration. This makes it ideal for parsing by scripts.
 205The description of the short format above also describes the porcelain
 206format, with a few exceptions:
 207
 2081. The user's color.status configuration is not respected; color will
 209   always be off.
 210
 2112. The user's status.relativePaths configuration is not respected; paths
 212   shown will always be relative to the repository root.
 213
 214There is also an alternate -z format recommended for machine parsing. In
 215that format, the status field is the same, but some other things
 216change.  First, the '\->' is omitted from rename entries and the field
 217order is reversed (e.g 'from \-> to' becomes 'to from'). Second, a NUL
 218(ASCII 0) follows each filename, replacing space as a field separator
 219and the terminating newline (but a space still separates the status
 220field from the first filename).  Third, filenames containing special
 221characters are not specially formatted; no quoting or
 222backslash-escaping is performed.
 223
 224Any submodule changes are reported as modified `M` instead of `m` or single `?`.
 225
 226Porcelain Format Version 2
 227~~~~~~~~~~~~~~~~~~~~~~~~~~
 228
 229Version 2 format adds more detailed information about the state of
 230the worktree and changed items.  Version 2 also defines an extensible
 231set of easy to parse optional headers.
 232
 233Header lines start with "#" and are added in response to specific
 234command line arguments.  Parsers should ignore headers they
 235don't recognize.
 236
 237### Branch Headers
 238
 239If `--branch` is given, a series of header lines are printed with
 240information about the current branch.
 241
 242    Line                                     Notes
 243    ------------------------------------------------------------
 244    # branch.oid <commit> | (initial)        Current commit.
 245    # branch.head <branch> | (detached)      Current branch.
 246    # branch.upstream <upstream_branch>      If upstream is set.
 247    # branch.ab +<ahead> -<behind>           If upstream is set and
 248                                             the commit is present.
 249    ------------------------------------------------------------
 250
 251### Changed Tracked Entries
 252
 253Following the headers, a series of lines are printed for tracked
 254entries.  One of three different line formats may be used to describe
 255an entry depending on the type of change.  Tracked entries are printed
 256in an undefined order; parsers should allow for a mixture of the 3
 257line types in any order.
 258
 259Ordinary changed entries have the following format:
 260
 261    1 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <path>
 262
 263Renamed or copied entries have the following format:
 264
 265    2 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <X><score> <path><sep><origPath>
 266
 267    Field       Meaning
 268    --------------------------------------------------------
 269    <XY>        A 2 character field containing the staged and
 270                unstaged XY values described in the short format,
 271                with unchanged indicated by a "." rather than
 272                a space.
 273    <sub>       A 4 character field describing the submodule state.
 274                "N..." when the entry is not a submodule.
 275                "S<c><m><u>" when the entry is a submodule.
 276                <c> is "C" if the commit changed; otherwise ".".
 277                <m> is "M" if it has tracked changes; otherwise ".".
 278                <u> is "U" if there are untracked changes; otherwise ".".
 279    <mH>        The octal file mode in HEAD.
 280    <mI>        The octal file mode in the index.
 281    <mW>        The octal file mode in the worktree.
 282    <hH>        The object name in HEAD.
 283    <hI>        The object name in the index.
 284    <X><score>  The rename or copy score (denoting the percentage
 285                of similarity between the source and target of the
 286                move or copy). For example "R100" or "C75".
 287    <path>      The pathname.  In a renamed/copied entry, this
 288                is the path in the index and in the working tree.
 289    <sep>       When the `-z` option is used, the 2 pathnames are separated
 290                with a NUL (ASCII 0x00) byte; otherwise, a tab (ASCII 0x09)
 291                byte separates them.
 292    <origPath>  The pathname in the commit at HEAD.  This is only
 293                present in a renamed/copied entry, and tells
 294                where the renamed/copied contents came from.
 295    --------------------------------------------------------
 296
 297Unmerged entries have the following format; the first character is
 298a "u" to distinguish from ordinary changed entries.
 299
 300    u <xy> <sub> <m1> <m2> <m3> <mW> <h1> <h2> <h3> <path>
 301
 302    Field       Meaning
 303    --------------------------------------------------------
 304    <XY>        A 2 character field describing the conflict type
 305                as described in the short format.
 306    <sub>       A 4 character field describing the submodule state
 307                as described above.
 308    <m1>        The octal file mode in stage 1.
 309    <m2>        The octal file mode in stage 2.
 310    <m3>        The octal file mode in stage 3.
 311    <mW>        The octal file mode in the worktree.
 312    <h1>        The object name in stage 1.
 313    <h2>        The object name in stage 2.
 314    <h3>        The object name in stage 3.
 315    <path>      The pathname.
 316    --------------------------------------------------------
 317
 318### Other Items
 319
 320Following the tracked entries (and if requested), a series of
 321lines will be printed for untracked and then ignored items
 322found in the worktree.
 323
 324Untracked items have the following format:
 325
 326    ? <path>
 327
 328Ignored items have the following format:
 329
 330    ! <path>
 331
 332### Pathname Format Notes and -z
 333
 334When the `-z` option is given, pathnames are printed as is and
 335without any quoting and lines are terminated with a NUL (ASCII 0x00)
 336byte.
 337
 338Without the `-z` option, pathnames with "unusual" characters are
 339quoted as explained for the configuration variable `core.quotePath`
 340(see linkgit:git-config[1]).
 341
 342
 343CONFIGURATION
 344-------------
 345
 346The command honors `color.status` (or `status.color` -- they
 347mean the same thing and the latter is kept for backward
 348compatibility) and `color.status.<slot>` configuration variables
 349to colorize its output.
 350
 351If the config variable `status.relativePaths` is set to false, then all
 352paths shown are relative to the repository root, not to the current
 353directory.
 354
 355If `status.submoduleSummary` is set to a non zero number or true (identical
 356to -1 or an unlimited number), the submodule summary will be enabled for
 357the long format and a summary of commits for modified submodules will be
 358shown (see --summary-limit option of linkgit:git-submodule[1]). Please note
 359that the summary output from the status command will be suppressed for all
 360submodules when `diff.ignoreSubmodules` is set to 'all' or only for those
 361submodules where `submodule.<name>.ignore=all`. To also view the summary for
 362ignored submodules you can either use the --ignore-submodules=dirty command
 363line option or the 'git submodule summary' command, which shows a similar
 364output but does not honor these settings.
 365
 366SEE ALSO
 367--------
 368linkgit:gitignore[5]
 369
 370GIT
 371---
 372Part of the linkgit:git[1] suite