Merge branch 'jk/maint-status-porcelain-z-b' into HEAD
[git/git.git] / Documentation / git-status.txt
1 git-status(1)
2 =============
3
4 NAME
5 ----
6 git-status - Show the working tree status
7
8
9 SYNOPSIS
10 --------
11 [verse]
12 'git status' [<options>...] [--] [<pathspec>...]
13
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`.
23
24 OPTIONS
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 +
45 The mode parameter is optional (defaults to 'all'), and is used to
46 specify the handling of untracked files; when -u is not used, the
47 default is 'normal', i.e. show untracked files and directories.
48 +
49 The 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 +
55 The default can be changed using the status.showUntrackedFiles
56 configuration 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 --column[=<options>]::
81 --no-column::
82 Display untracked files in columns. See configuration variable
83 column.status for option syntax.`--column` and `--no-column`
84 without options are equivalent to 'always' and 'never'
85 respectively.
86
87
88 OUTPUT
89 ------
90 The output from this command is designed to be used as a commit
91 template comment, and all the output lines are prefixed with '#'.
92 The default, long format, is designed to be human readable,
93 verbose and descriptive. Its contents and format are subject to change
94 at any time.
95
96 The paths mentioned in the output, unlike many other git commands, are
97 made relative to the current directory if you are working in a
98 subdirectory (this is on purpose, to help cutting and pasting). See
99 the status.relativePaths config option below.
100
101 Short Format
102 ~~~~~~~~~~~~
103
104 In the short-format, the status of each path is shown as
105
106 XY PATH1 -> PATH2
107
108 where `PATH1` is the path in the `HEAD`, and the " `-> PATH2`" part is
109 shown only when `PATH1` corresponds to a different path in the
110 index/worktree (i.e. the file is renamed). The 'XY' is a two-letter
111 status code.
112
113 The fields (including the `->`) are separated from each other by a
114 single space. If a filename contains whitespace or other nonprintable
115 characters, that field will be quoted in the manner of a C string
116 literal: surrounded by ASCII double quote (34) characters, and with
117 interior special characters backslash-escaped.
118
119 For paths with merge conflicts, `X` and 'Y' show the modification
120 states of each side of the merge. For paths that do not have merge
121 conflicts, `X` shows the status of the index, and `Y` shows the status
122 of the work tree. For untracked paths, `XY` are `??`. Other status
123 codes can be interpreted as follows:
124
125 * ' ' = unmodified
126 * 'M' = modified
127 * 'A' = added
128 * 'D' = deleted
129 * 'R' = renamed
130 * 'C' = copied
131 * 'U' = updated but unmerged
132
133 Ignored files are not listed, unless `--ignored` option is in effect,
134 in which case `XY` are `!!`.
135
136 X Y Meaning
137 -------------------------------------------------
138 [MD] not updated
139 M [ MD] updated in index
140 A [ MD] added to index
141 D [ M] deleted from index
142 R [ MD] renamed in index
143 C [ MD] copied in index
144 [MARC] index and work tree matches
145 [ MARC] M work tree changed since index
146 [ MARC] D deleted in work tree
147 -------------------------------------------------
148 D D unmerged, both deleted
149 A U unmerged, added by us
150 U D unmerged, deleted by them
151 U A unmerged, added by them
152 D U unmerged, deleted by us
153 A A unmerged, both added
154 U U unmerged, both modified
155 -------------------------------------------------
156 ? ? untracked
157 ! ! ignored
158 -------------------------------------------------
159
160 If -b is used the short-format status is preceded by a line
161
162 ## branchname tracking info
163
164 Porcelain Format
165 ~~~~~~~~~~~~~~~~
166
167 The porcelain format is similar to the short format, but is guaranteed
168 not to change in a backwards-incompatible way between git versions or
169 based on user configuration. This makes it ideal for parsing by scripts.
170 The description of the short format above also describes the porcelain
171 format, with a few exceptions:
172
173 1. The user's color.status configuration is not respected; color will
174 always be off.
175
176 2. The user's status.relativePaths configuration is not respected; paths
177 shown will always be relative to the repository root.
178
179 There is also an alternate -z format recommended for machine parsing. In
180 that format, the status field is the same, but some other things
181 change. First, the '\->' is omitted from rename entries and the field
182 order is reversed (e.g 'from \-> to' becomes 'to from'). Second, a NUL
183 (ASCII 0) follows each filename, replacing space as a field separator
184 and the terminating newline (but a space still separates the status
185 field from the first filename). Third, filenames containing special
186 characters are not specially formatted; no quoting or
187 backslash-escaping is performed.
188
189 CONFIGURATION
190 -------------
191
192 The command honors `color.status` (or `status.color` -- they
193 mean the same thing and the latter is kept for backward
194 compatibility) and `color.status.<slot>` configuration variables
195 to colorize its output.
196
197 If the config variable `status.relativePaths` is set to false, then all
198 paths shown are relative to the repository root, not to the current
199 directory.
200
201 If `status.submodulesummary` is set to a non zero number or true (identical
202 to -1 or an unlimited number), the submodule summary will be enabled for
203 the long format and a summary of commits for modified submodules will be
204 shown (see --summary-limit option of linkgit:git-submodule[1]).
205
206 SEE ALSO
207 --------
208 linkgit:gitignore[5]
209
210 GIT
211 ---
212 Part of the linkgit:git[1] suite