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