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