Junio C Hamano | 215a7ad | 2005-09-07 17:26:23 -0700 | [diff] [blame] | 1 | git-status(1) |
| 2 | ============= |
Junio C Hamano | 3f971fc | 2005-08-14 17:24:36 -0700 | [diff] [blame] | 3 | |
| 4 | NAME |
| 5 | ---- |
Junio C Hamano | c3f0baa | 2007-01-18 15:53:37 -0800 | [diff] [blame] | 6 | git-status - Show the working tree status |
Junio C Hamano | 3f971fc | 2005-08-14 17:24:36 -0700 | [diff] [blame] | 7 | |
| 8 | |
| 9 | SYNOPSIS |
| 10 | -------- |
Martin von Zweigbergk | 7791a1d | 2011-07-01 22:38:26 -0400 | [diff] [blame] | 11 | [verse] |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 12 | 'git status' [<options>...] [--] [<pathspec>...] |
Junio C Hamano | 3f971fc | 2005-08-14 17:24:36 -0700 | [diff] [blame] | 13 | |
| 14 | DESCRIPTION |
| 15 | ----------- |
Jeff King | 2099bca | 2007-12-08 04:00:31 -0500 | [diff] [blame] | 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 |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 19 | tracked by Git (and are not ignored by linkgit:gitignore[5]). The first |
Jeff King | 2099bca | 2007-12-08 04:00:31 -0500 | [diff] [blame] | 20 | are what you _would_ commit by running `git commit`; the second and |
Thomas Rast | 0b444cd | 2010-01-10 00:33:00 +0100 | [diff] [blame] | 21 | third are what you _could_ commit by running 'git add' before running |
Jeff King | 2099bca | 2007-12-08 04:00:31 -0500 | [diff] [blame] | 22 | `git commit`. |
Junio C Hamano | 3f971fc | 2005-08-14 17:24:36 -0700 | [diff] [blame] | 23 | |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 24 | OPTIONS |
| 25 | ------- |
Junio C Hamano | fb6ff94 | 2006-08-07 22:41:32 -0700 | [diff] [blame] | 26 | |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 27 | -s:: |
| 28 | --short:: |
| 29 | Give the output in the short-format. |
| 30 | |
Michael J Gruber | 46077fa | 2010-05-25 16:52:03 +0200 | [diff] [blame] | 31 | -b:: |
| 32 | --branch:: |
| 33 | Show the branch and tracking info even in short-format. |
| 34 | |
Liam Beguin | c1b5d01 | 2017-06-17 18:30:51 -0400 | [diff] [blame] | 35 | --show-stash:: |
| 36 | Show the number of entries currently stashed away. |
| 37 | |
Jeff Hostetler | c4f596b | 2016-08-05 18:00:28 -0400 | [diff] [blame] | 38 | --porcelain[=<version>]:: |
Jeff King | fc17df0 | 2011-05-26 22:31:51 -0400 | [diff] [blame] | 39 | Give the output in an easy-to-parse format for scripts. |
| 40 | This is similar to the short output, but will remain stable |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 41 | across Git versions and regardless of user configuration. See |
Jeff King | fc17df0 | 2011-05-26 22:31:51 -0400 | [diff] [blame] | 42 | below for details. |
Jeff Hostetler | c4f596b | 2016-08-05 18:00:28 -0400 | [diff] [blame] | 43 | + |
| 44 | The version parameter is used to specify the format version. |
| 45 | This is optional and defaults to the original version 'v1' format. |
Jeff King | 6f15787 | 2009-09-05 04:55:37 -0400 | [diff] [blame] | 46 | |
Jeff King | f3f47a1 | 2012-10-18 21:15:50 +0700 | [diff] [blame] | 47 | --long:: |
| 48 | Give the output in the long-format. This is the default. |
| 49 | |
Michael Haggerty | 9c589d9 | 2015-04-23 14:27:46 +0200 | [diff] [blame] | 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 | |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 58 | -u[<mode>]:: |
| 59 | --untracked-files[=<mode>]:: |
Clemens Buchacher | 4cc6260 | 2011-02-21 21:05:25 +0100 | [diff] [blame] | 60 | Show untracked files. |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 61 | + |
Martin Ågren | 2017956 | 2019-09-07 16:12:47 +0200 | [diff] [blame] | 62 | -- |
Matthieu Moy | 2b594bf | 2015-09-19 09:47:50 +0200 | [diff] [blame] | 63 | The mode parameter is used to specify the handling of untracked files. |
| 64 | It is optional: it defaults to 'all', and if specified, it must be |
| 65 | stuck to the option (e.g. `-uno`, but not `-u no`). |
Martin Ågren | 2017956 | 2019-09-07 16:12:47 +0200 | [diff] [blame] | 66 | |
Clemens Buchacher | 4cc6260 | 2011-02-21 21:05:25 +0100 | [diff] [blame] | 67 | The possible options are: |
Martin Ågren | 2017956 | 2019-09-07 16:12:47 +0200 | [diff] [blame] | 68 | |
Junio C Hamano | 5823eb2 | 2013-03-15 09:53:48 -0700 | [diff] [blame] | 69 | - 'no' - Show no untracked files. |
| 70 | - 'normal' - Shows untracked files and directories. |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 71 | - 'all' - Also shows individual files in untracked directories. |
Martin Ågren | 2017956 | 2019-09-07 16:12:47 +0200 | [diff] [blame] | 72 | |
Junio C Hamano | 5823eb2 | 2013-03-15 09:53:48 -0700 | [diff] [blame] | 73 | When `-u` option is not used, untracked files and directories are |
| 74 | shown (i.e. the same as specifying `normal`), to help you avoid |
| 75 | forgetting to add newly created files. Because it takes extra work |
| 76 | to find untracked files in the filesystem, this mode may take some |
Nguyễn Thái Ngọc Duy | aeb6f8b | 2015-03-08 17:12:47 +0700 | [diff] [blame] | 77 | time in a large working tree. |
| 78 | Consider enabling untracked cache and split index if supported (see |
| 79 | `git update-index --untracked-cache` and `git update-index |
| 80 | --split-index`), Otherwise you can use `no` to have `git status` |
Junio C Hamano | 5823eb2 | 2013-03-15 09:53:48 -0700 | [diff] [blame] | 81 | return more quickly without showing untracked files. |
Martin Ågren | 2017956 | 2019-09-07 16:12:47 +0200 | [diff] [blame] | 82 | |
Clemens Buchacher | 4cc6260 | 2011-02-21 21:05:25 +0100 | [diff] [blame] | 83 | The default can be changed using the status.showUntrackedFiles |
| 84 | configuration variable documented in linkgit:git-config[1]. |
Martin Ågren | 2017956 | 2019-09-07 16:12:47 +0200 | [diff] [blame] | 85 | -- |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 86 | |
Jens Lehmann | 46a958b | 2010-06-25 16:56:47 +0200 | [diff] [blame] | 87 | --ignore-submodules[=<when>]:: |
| 88 | Ignore changes to submodules when looking for changes. <when> can be |
Jens Lehmann | aee9c7d | 2010-08-06 00:39:25 +0200 | [diff] [blame] | 89 | either "none", "untracked", "dirty" or "all", which is the default. |
| 90 | Using "none" will consider the submodule modified when it either contains |
| 91 | untracked or modified files or its HEAD differs from the commit recorded |
| 92 | in the superproject and can be used to override any settings of the |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 93 | 'ignore' option in linkgit:git-config[1] or linkgit:gitmodules[5]. When |
Jens Lehmann | 46a958b | 2010-06-25 16:56:47 +0200 | [diff] [blame] | 94 | "untracked" is used submodules are not considered dirty when they only |
| 95 | contain untracked content (but they are still scanned for modified |
| 96 | content). Using "dirty" ignores all changes to the work tree of submodules, |
| 97 | only changes to the commits stored in the superproject are shown (this was |
| 98 | the behavior before 1.7.0). Using "all" hides all changes to submodules |
| 99 | (and suppresses the output of submodule summaries when the config option |
Nguyễn Thái Ngọc Duy | da0005b | 2015-03-11 16:32:45 -0400 | [diff] [blame] | 100 | `status.submoduleSummary` is set). |
Jens Lehmann | 46a958b | 2010-06-25 16:56:47 +0200 | [diff] [blame] | 101 | |
Jameson Miller | 1b2bc39 | 2017-10-30 13:21:39 -0400 | [diff] [blame] | 102 | --ignored[=<mode>]:: |
Junio C Hamano | 150b493 | 2011-06-02 09:07:11 -0700 | [diff] [blame] | 103 | Show ignored files as well. |
Jameson Miller | 1b2bc39 | 2017-10-30 13:21:39 -0400 | [diff] [blame] | 104 | + |
Martin Ågren | 2017956 | 2019-09-07 16:12:47 +0200 | [diff] [blame] | 105 | -- |
Jameson Miller | 1b2bc39 | 2017-10-30 13:21:39 -0400 | [diff] [blame] | 106 | The mode parameter is used to specify the handling of ignored files. |
| 107 | It is optional: it defaults to 'traditional'. |
Martin Ågren | 2017956 | 2019-09-07 16:12:47 +0200 | [diff] [blame] | 108 | |
Jameson Miller | 1b2bc39 | 2017-10-30 13:21:39 -0400 | [diff] [blame] | 109 | The possible options are: |
Martin Ågren | 2017956 | 2019-09-07 16:12:47 +0200 | [diff] [blame] | 110 | |
Jameson Miller | 1b2bc39 | 2017-10-30 13:21:39 -0400 | [diff] [blame] | 111 | - 'traditional' - Shows ignored files and directories, unless |
Ville Skyttä | 928f0ab | 2018-06-22 09:50:37 +0300 | [diff] [blame] | 112 | --untracked-files=all is specified, in which case |
Jameson Miller | 1b2bc39 | 2017-10-30 13:21:39 -0400 | [diff] [blame] | 113 | individual files in ignored directories are |
| 114 | displayed. |
| 115 | - 'no' - Show no ignored files. |
| 116 | - 'matching' - Shows ignored files and directories matching an |
| 117 | ignore pattern. |
Martin Ågren | 2017956 | 2019-09-07 16:12:47 +0200 | [diff] [blame] | 118 | |
Elijah Newren | c30d4f1 | 2018-04-05 10:20:26 -0700 | [diff] [blame] | 119 | When 'matching' mode is specified, paths that explicitly match an |
Jameson Miller | 1b2bc39 | 2017-10-30 13:21:39 -0400 | [diff] [blame] | 120 | ignored pattern are shown. If a directory matches an ignore pattern, |
| 121 | then it is shown, but not paths contained in the ignored directory. If |
| 122 | a directory does not match an ignore pattern, but all contents are |
| 123 | ignored, then the directory is not shown, but all contents are shown. |
Martin Ågren | 2017956 | 2019-09-07 16:12:47 +0200 | [diff] [blame] | 124 | -- |
Junio C Hamano | 150b493 | 2011-06-02 09:07:11 -0700 | [diff] [blame] | 125 | |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 126 | -z:: |
Jeff King | 6f15787 | 2009-09-05 04:55:37 -0400 | [diff] [blame] | 127 | Terminate entries with NUL, instead of LF. This implies |
Jeff Hostetler | c4f596b | 2016-08-05 18:00:28 -0400 | [diff] [blame] | 128 | the `--porcelain=v1` output format if no other format is given. |
Jeff King | 2099bca | 2007-12-08 04:00:31 -0500 | [diff] [blame] | 129 | |
Nguyễn Thái Ngọc Duy | 323d053 | 2012-04-13 17:54:39 +0700 | [diff] [blame] | 130 | --column[=<options>]:: |
| 131 | --no-column:: |
| 132 | Display untracked files in columns. See configuration variable |
| 133 | column.status for option syntax.`--column` and `--no-column` |
| 134 | without options are equivalent to 'always' and 'never' |
| 135 | respectively. |
| 136 | |
Jeff Hostetler | fd9b544 | 2018-01-09 18:50:16 +0000 | [diff] [blame] | 137 | --ahead-behind:: |
| 138 | --no-ahead-behind:: |
| 139 | Display or do not display detailed ahead/behind counts for the |
| 140 | branch relative to its upstream branch. Defaults to true. |
| 141 | |
Ben Peart | e8b2dc2 | 2018-05-11 15:38:58 +0000 | [diff] [blame] | 142 | --renames:: |
| 143 | --no-renames:: |
| 144 | Turn on/off rename detection regardless of user configuration. |
| 145 | See also linkgit:git-diff[1] `--no-renames`. |
| 146 | |
| 147 | --find-renames[=<n>]:: |
| 148 | Turn on rename detection, optionally setting the similarity |
| 149 | threshold. |
| 150 | See also linkgit:git-diff[1] `--find-renames`. |
| 151 | |
Manav Rathi | 93dbefb | 2017-09-25 13:39:00 +0530 | [diff] [blame] | 152 | <pathspec>...:: |
| 153 | See the 'pathspec' entry in linkgit:gitglossary[7]. |
Junio C Hamano | 3f971fc | 2005-08-14 17:24:36 -0700 | [diff] [blame] | 154 | |
| 155 | OUTPUT |
| 156 | ------ |
| 157 | The output from this command is designed to be used as a commit |
Dirk Wallenstein | 22d55ae | 2014-03-21 15:10:18 +0100 | [diff] [blame] | 158 | template comment. |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 159 | The default, long format, is designed to be human readable, |
Jeff King | 043b5cd | 2011-05-26 22:31:11 -0400 | [diff] [blame] | 160 | verbose and descriptive. Its contents and format are subject to change |
| 161 | at any time. |
Junio C Hamano | 3f971fc | 2005-08-14 17:24:36 -0700 | [diff] [blame] | 162 | |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 163 | The paths mentioned in the output, unlike many other Git commands, are |
Jeff King | 2099bca | 2007-12-08 04:00:31 -0500 | [diff] [blame] | 164 | made relative to the current directory if you are working in a |
Jeff King | 46f721c | 2007-12-07 16:26:07 -0500 | [diff] [blame] | 165 | subdirectory (this is on purpose, to help cutting and pasting). See |
| 166 | the status.relativePaths config option below. |
Junio C Hamano | c786050 | 2007-12-06 09:15:39 -0800 | [diff] [blame] | 167 | |
Jeff King | fc17df0 | 2011-05-26 22:31:51 -0400 | [diff] [blame] | 168 | Short Format |
| 169 | ~~~~~~~~~~~~ |
| 170 | |
Nguyễn Thái Ngọc Duy | 176ea74 | 2017-12-27 17:18:39 +0700 | [diff] [blame] | 171 | In the short-format, the status of each path is shown as one of these |
| 172 | forms |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 173 | |
Nguyễn Thái Ngọc Duy | 176ea74 | 2017-12-27 17:18:39 +0700 | [diff] [blame] | 174 | XY PATH |
| 175 | XY ORIG_PATH -> PATH |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 176 | |
Nguyễn Thái Ngọc Duy | 176ea74 | 2017-12-27 17:18:39 +0700 | [diff] [blame] | 177 | where `ORIG_PATH` is where the renamed/copied contents came |
| 178 | from. `ORIG_PATH` is only shown when the entry is renamed or |
| 179 | copied. The `XY` is a two-letter status code. |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 180 | |
Jeff King | 6cf378f | 2012-04-26 04:51:57 -0400 | [diff] [blame] | 181 | The fields (including the `->`) are separated from each other by a |
Eric Raymond | e92e9cd | 2010-04-23 13:40:15 -0400 | [diff] [blame] | 182 | single space. If a filename contains whitespace or other nonprintable |
| 183 | characters, that field will be quoted in the manner of a C string |
| 184 | literal: surrounded by ASCII double quote (34) characters, and with |
| 185 | interior special characters backslash-escaped. |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 186 | |
brian m. carlson | 4eb56b5 | 2021-01-10 19:04:48 +0000 | [diff] [blame] | 187 | There are three different types of states that are shown using this format, and |
| 188 | each one uses the `XY` syntax differently: |
| 189 | |
| 190 | * When a merge is occurring and the merge was successful, or outside of a merge |
| 191 | situation, `X` shows the status of the index and `Y` shows the status of the |
| 192 | working tree. |
| 193 | * When a merge conflict has occurred and has not yet been resolved, `X` and `Y` |
| 194 | show the state introduced by each head of the merge, relative to the common |
| 195 | ancestor. These paths are said to be _unmerged_. |
| 196 | * When a path is untracked, `X` and `Y` are always the same, since they are |
| 197 | unknown to the index. `??` is used for untracked paths. Ignored files are |
| 198 | not listed unless `--ignored` is used; if it is, ignored files are indicated |
| 199 | by `!!`. |
| 200 | |
| 201 | Note that the term _merge_ here also includes rebases using the default |
| 202 | `--merge` strategy, cherry-picks, and anything else using the merge machinery. |
| 203 | |
| 204 | In the following table, these three classes are shown in separate sections, and |
| 205 | these characters are used for `X` and `Y` fields for the first two sections that |
| 206 | show tracked paths: |
Eric Raymond | e92e9cd | 2010-04-23 13:40:15 -0400 | [diff] [blame] | 207 | |
| 208 | * ' ' = unmodified |
| 209 | * 'M' = modified |
| 210 | * 'A' = added |
| 211 | * 'D' = deleted |
| 212 | * 'R' = renamed |
| 213 | * 'C' = copied |
| 214 | * 'U' = updated but unmerged |
| 215 | |
Martin Ågren | b62eb1d | 2018-12-16 15:28:59 +0100 | [diff] [blame] | 216 | .... |
| 217 | X Y Meaning |
| 218 | ------------------------------------------------- |
| 219 | [AMD] not updated |
| 220 | M [ MD] updated in index |
| 221 | A [ MD] added to index |
| 222 | D deleted from index |
| 223 | R [ MD] renamed in index |
| 224 | C [ MD] copied in index |
| 225 | [MARC] index and work tree matches |
| 226 | [ MARC] M work tree changed since index |
| 227 | [ MARC] D deleted in work tree |
| 228 | [ D] R renamed in work tree |
| 229 | [ D] C copied in work tree |
| 230 | ------------------------------------------------- |
| 231 | D D unmerged, both deleted |
| 232 | A U unmerged, added by us |
| 233 | U D unmerged, deleted by them |
| 234 | U A unmerged, added by them |
| 235 | D U unmerged, deleted by us |
| 236 | A A unmerged, both added |
| 237 | U U unmerged, both modified |
| 238 | ------------------------------------------------- |
| 239 | ? ? untracked |
| 240 | ! ! ignored |
| 241 | ------------------------------------------------- |
| 242 | .... |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 243 | |
Stefan Beller | dd6962d | 2017-03-29 15:26:15 -0700 | [diff] [blame] | 244 | Submodules have more state and instead report |
| 245 | M the submodule has a different HEAD than |
| 246 | recorded in the index |
| 247 | m the submodule has modified content |
| 248 | ? the submodule has untracked files |
| 249 | since modified content or untracked files in a submodule cannot be added |
| 250 | via `git add` in the superproject to prepare a commit. |
| 251 | |
Stefan Beller | 40069d6 | 2017-03-29 15:26:16 -0700 | [diff] [blame] | 252 | 'm' and '?' are applied recursively. For example if a nested submodule |
| 253 | in a submodule contains an untracked file, this is reported as '?' as well. |
Stefan Beller | dd6962d | 2017-03-29 15:26:15 -0700 | [diff] [blame] | 254 | |
Michael J Gruber | 46077fa | 2010-05-25 16:52:03 +0200 | [diff] [blame] | 255 | If -b is used the short-format status is preceded by a line |
| 256 | |
Jeff Hostetler | 1cd828d | 2016-08-11 10:46:00 -0400 | [diff] [blame] | 257 | ## branchname tracking info |
Michael J Gruber | 46077fa | 2010-05-25 16:52:03 +0200 | [diff] [blame] | 258 | |
Jeff Hostetler | 1cd828d | 2016-08-11 10:46:00 -0400 | [diff] [blame] | 259 | Porcelain Format Version 1 |
| 260 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ |
Jeff King | fc17df0 | 2011-05-26 22:31:51 -0400 | [diff] [blame] | 261 | |
Jeff Hostetler | 1cd828d | 2016-08-11 10:46:00 -0400 | [diff] [blame] | 262 | Version 1 porcelain format is similar to the short format, but is guaranteed |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 263 | not to change in a backwards-incompatible way between Git versions or |
Jeff King | fc17df0 | 2011-05-26 22:31:51 -0400 | [diff] [blame] | 264 | based on user configuration. This makes it ideal for parsing by scripts. |
| 265 | The description of the short format above also describes the porcelain |
| 266 | format, with a few exceptions: |
| 267 | |
| 268 | 1. The user's color.status configuration is not respected; color will |
| 269 | always be off. |
| 270 | |
| 271 | 2. The user's status.relativePaths configuration is not respected; paths |
| 272 | shown will always be relative to the repository root. |
| 273 | |
| 274 | There is also an alternate -z format recommended for machine parsing. In |
Eric Raymond | e92e9cd | 2010-04-23 13:40:15 -0400 | [diff] [blame] | 275 | that format, the status field is the same, but some other things |
Jeff King | 715e716 | 2011-05-26 22:32:41 -0400 | [diff] [blame] | 276 | change. First, the '\->' is omitted from rename entries and the field |
| 277 | order is reversed (e.g 'from \-> to' becomes 'to from'). Second, a NUL |
Eric Raymond | e92e9cd | 2010-04-23 13:40:15 -0400 | [diff] [blame] | 278 | (ASCII 0) follows each filename, replacing space as a field separator |
| 279 | and the terminating newline (but a space still separates the status |
| 280 | field from the first filename). Third, filenames containing special |
| 281 | characters are not specially formatted; no quoting or |
Jeff King | d4a6bf1 | 2012-05-07 17:09:04 -0400 | [diff] [blame] | 282 | backslash-escaping is performed. |
Junio C Hamano | 3f971fc | 2005-08-14 17:24:36 -0700 | [diff] [blame] | 283 | |
Stefan Beller | dd6962d | 2017-03-29 15:26:15 -0700 | [diff] [blame] | 284 | Any submodule changes are reported as modified `M` instead of `m` or single `?`. |
| 285 | |
Jeff Hostetler | 1cd828d | 2016-08-11 10:46:00 -0400 | [diff] [blame] | 286 | Porcelain Format Version 2 |
| 287 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 288 | |
| 289 | Version 2 format adds more detailed information about the state of |
| 290 | the worktree and changed items. Version 2 also defines an extensible |
| 291 | set of easy to parse optional headers. |
| 292 | |
| 293 | Header lines start with "#" and are added in response to specific |
| 294 | command line arguments. Parsers should ignore headers they |
| 295 | don't recognize. |
| 296 | |
Todd Zullinger | 473dd35 | 2019-03-30 14:30:01 -0400 | [diff] [blame] | 297 | Branch Headers |
| 298 | ^^^^^^^^^^^^^^ |
Jeff Hostetler | 1cd828d | 2016-08-11 10:46:00 -0400 | [diff] [blame] | 299 | |
| 300 | If `--branch` is given, a series of header lines are printed with |
| 301 | information about the current branch. |
| 302 | |
Martin Ågren | b62eb1d | 2018-12-16 15:28:59 +0100 | [diff] [blame] | 303 | .... |
| 304 | Line Notes |
| 305 | ------------------------------------------------------------ |
| 306 | # branch.oid <commit> | (initial) Current commit. |
| 307 | # branch.head <branch> | (detached) Current branch. |
| 308 | # branch.upstream <upstream_branch> If upstream is set. |
| 309 | # branch.ab +<ahead> -<behind> If upstream is set and |
| 310 | the commit is present. |
| 311 | ------------------------------------------------------------ |
| 312 | .... |
Jeff Hostetler | 1cd828d | 2016-08-11 10:46:00 -0400 | [diff] [blame] | 313 | |
Todd Zullinger | 473dd35 | 2019-03-30 14:30:01 -0400 | [diff] [blame] | 314 | Changed Tracked Entries |
| 315 | ^^^^^^^^^^^^^^^^^^^^^^^ |
Jeff Hostetler | 1cd828d | 2016-08-11 10:46:00 -0400 | [diff] [blame] | 316 | |
| 317 | Following the headers, a series of lines are printed for tracked |
| 318 | entries. One of three different line formats may be used to describe |
| 319 | an entry depending on the type of change. Tracked entries are printed |
| 320 | in an undefined order; parsers should allow for a mixture of the 3 |
| 321 | line types in any order. |
| 322 | |
| 323 | Ordinary changed entries have the following format: |
| 324 | |
| 325 | 1 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <path> |
| 326 | |
| 327 | Renamed or copied entries have the following format: |
| 328 | |
| 329 | 2 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <X><score> <path><sep><origPath> |
| 330 | |
Martin Ågren | b62eb1d | 2018-12-16 15:28:59 +0100 | [diff] [blame] | 331 | .... |
| 332 | Field Meaning |
| 333 | -------------------------------------------------------- |
| 334 | <XY> A 2 character field containing the staged and |
| 335 | unstaged XY values described in the short format, |
| 336 | with unchanged indicated by a "." rather than |
| 337 | a space. |
| 338 | <sub> A 4 character field describing the submodule state. |
| 339 | "N..." when the entry is not a submodule. |
| 340 | "S<c><m><u>" when the entry is a submodule. |
| 341 | <c> is "C" if the commit changed; otherwise ".". |
| 342 | <m> is "M" if it has tracked changes; otherwise ".". |
| 343 | <u> is "U" if there are untracked changes; otherwise ".". |
| 344 | <mH> The octal file mode in HEAD. |
| 345 | <mI> The octal file mode in the index. |
| 346 | <mW> The octal file mode in the worktree. |
| 347 | <hH> The object name in HEAD. |
| 348 | <hI> The object name in the index. |
| 349 | <X><score> The rename or copy score (denoting the percentage |
| 350 | of similarity between the source and target of the |
| 351 | move or copy). For example "R100" or "C75". |
| 352 | <path> The pathname. In a renamed/copied entry, this |
| 353 | is the target path. |
| 354 | <sep> When the `-z` option is used, the 2 pathnames are separated |
| 355 | with a NUL (ASCII 0x00) byte; otherwise, a tab (ASCII 0x09) |
| 356 | byte separates them. |
| 357 | <origPath> The pathname in the commit at HEAD or in the index. |
| 358 | This is only present in a renamed/copied entry, and |
| 359 | tells where the renamed/copied contents came from. |
| 360 | -------------------------------------------------------- |
| 361 | .... |
Jeff Hostetler | 1cd828d | 2016-08-11 10:46:00 -0400 | [diff] [blame] | 362 | |
| 363 | Unmerged entries have the following format; the first character is |
| 364 | a "u" to distinguish from ordinary changed entries. |
| 365 | |
| 366 | u <xy> <sub> <m1> <m2> <m3> <mW> <h1> <h2> <h3> <path> |
| 367 | |
Martin Ågren | b62eb1d | 2018-12-16 15:28:59 +0100 | [diff] [blame] | 368 | .... |
| 369 | Field Meaning |
| 370 | -------------------------------------------------------- |
| 371 | <XY> A 2 character field describing the conflict type |
| 372 | as described in the short format. |
| 373 | <sub> A 4 character field describing the submodule state |
| 374 | as described above. |
| 375 | <m1> The octal file mode in stage 1. |
| 376 | <m2> The octal file mode in stage 2. |
| 377 | <m3> The octal file mode in stage 3. |
| 378 | <mW> The octal file mode in the worktree. |
| 379 | <h1> The object name in stage 1. |
| 380 | <h2> The object name in stage 2. |
| 381 | <h3> The object name in stage 3. |
| 382 | <path> The pathname. |
| 383 | -------------------------------------------------------- |
| 384 | .... |
Jeff Hostetler | 1cd828d | 2016-08-11 10:46:00 -0400 | [diff] [blame] | 385 | |
Todd Zullinger | 473dd35 | 2019-03-30 14:30:01 -0400 | [diff] [blame] | 386 | Other Items |
| 387 | ^^^^^^^^^^^ |
Jeff Hostetler | 1cd828d | 2016-08-11 10:46:00 -0400 | [diff] [blame] | 388 | |
| 389 | Following the tracked entries (and if requested), a series of |
| 390 | lines will be printed for untracked and then ignored items |
| 391 | found in the worktree. |
| 392 | |
| 393 | Untracked items have the following format: |
| 394 | |
| 395 | ? <path> |
| 396 | |
| 397 | Ignored items have the following format: |
| 398 | |
| 399 | ! <path> |
| 400 | |
Todd Zullinger | 473dd35 | 2019-03-30 14:30:01 -0400 | [diff] [blame] | 401 | Pathname Format Notes and -z |
| 402 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
Jeff Hostetler | 1cd828d | 2016-08-11 10:46:00 -0400 | [diff] [blame] | 403 | |
| 404 | When the `-z` option is given, pathnames are printed as is and |
| 405 | without any quoting and lines are terminated with a NUL (ASCII 0x00) |
| 406 | byte. |
| 407 | |
Andreas Heiduk | 860cd69 | 2017-03-02 20:03:52 +0100 | [diff] [blame] | 408 | Without the `-z` option, pathnames with "unusual" characters are |
| 409 | quoted as explained for the configuration variable `core.quotePath` |
| 410 | (see linkgit:git-config[1]). |
Jeff Hostetler | 1cd828d | 2016-08-11 10:46:00 -0400 | [diff] [blame] | 411 | |
| 412 | |
Junio C Hamano | 31fcd63 | 2007-01-17 01:11:01 -0800 | [diff] [blame] | 413 | CONFIGURATION |
| 414 | ------------- |
| 415 | |
| 416 | The command honors `color.status` (or `status.color` -- they |
| 417 | mean the same thing and the latter is kept for backward |
| 418 | compatibility) and `color.status.<slot>` configuration variables |
| 419 | to colorize its output. |
| 420 | |
Jeff King | 46f721c | 2007-12-07 16:26:07 -0500 | [diff] [blame] | 421 | If the config variable `status.relativePaths` is set to false, then all |
Michael J Gruber | 482a6c1 | 2009-11-26 16:24:38 +0100 | [diff] [blame] | 422 | paths shown are relative to the repository root, not to the current |
| 423 | directory. |
Jeff King | 46f721c | 2007-12-07 16:26:07 -0500 | [diff] [blame] | 424 | |
Nguyễn Thái Ngọc Duy | da0005b | 2015-03-11 16:32:45 -0400 | [diff] [blame] | 425 | If `status.submoduleSummary` is set to a non zero number or true (identical |
Jeff King | 46b77a6 | 2009-09-05 04:52:18 -0400 | [diff] [blame] | 426 | to -1 or an unlimited number), the submodule summary will be enabled for |
| 427 | the long format and a summary of commits for modified submodules will be |
Jens Lehmann | bb58b69 | 2013-09-11 21:07:15 +0200 | [diff] [blame] | 428 | shown (see --summary-limit option of linkgit:git-submodule[1]). Please note |
| 429 | that the summary output from the status command will be suppressed for all |
| 430 | submodules when `diff.ignoreSubmodules` is set to 'all' or only for those |
| 431 | submodules where `submodule.<name>.ignore=all`. To also view the summary for |
| 432 | ignored submodules you can either use the --ignore-submodules=dirty command |
| 433 | line option or the 'git submodule summary' command, which shows a similar |
| 434 | output but does not honor these settings. |
Ping Yin | ac8d5af | 2008-04-12 23:05:32 +0800 | [diff] [blame] | 435 | |
Jeff King | 5e83cca | 2017-11-27 01:04:12 -0500 | [diff] [blame] | 436 | BACKGROUND REFRESH |
| 437 | ------------------ |
| 438 | |
| 439 | By default, `git status` will automatically refresh the index, updating |
| 440 | the cached stat information from the working tree and writing out the |
| 441 | result. Writing out the updated index is an optimization that isn't |
| 442 | strictly necessary (`status` computes the values for itself, but writing |
| 443 | them out is just to save subsequent programs from repeating our |
| 444 | computation). When `status` is run in the background, the lock held |
| 445 | during the write may conflict with other simultaneous processes, causing |
| 446 | them to fail. Scripts running `status` in the background should consider |
| 447 | using `git --no-optional-locks status` (see linkgit:git[1] for details). |
| 448 | |
Junio C Hamano | 56ae8df | 2008-05-28 16:55:27 -0700 | [diff] [blame] | 449 | SEE ALSO |
Josh Triplett | cedb8d5 | 2007-06-02 10:08:54 -0700 | [diff] [blame] | 450 | -------- |
Dan McGee | 5162e69 | 2007-12-29 00:20:38 -0600 | [diff] [blame] | 451 | linkgit:gitignore[5] |
Junio C Hamano | 31fcd63 | 2007-01-17 01:11:01 -0800 | [diff] [blame] | 452 | |
Junio C Hamano | 3f971fc | 2005-08-14 17:24:36 -0700 | [diff] [blame] | 453 | GIT |
| 454 | --- |
Christian Couder | 9e1f0a8 | 2008-06-06 09:07:32 +0200 | [diff] [blame] | 455 | Part of the linkgit:git[1] suite |