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