Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 1 | git-status(1) |
| 2 | ============= |
| 3 | |
| 4 | NAME |
| 5 | ---- |
Junio C Hamano | 7c73c66 | 2007-01-19 00:37:50 | [diff] [blame] | 6 | git-status - Show the working tree status |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 7 | |
| 8 | |
| 9 | SYNOPSIS |
| 10 | -------- |
Junio C Hamano | 15567bc | 2011-07-23 00:51:59 | [diff] [blame] | 11 | [verse] |
Junio C Hamano | cf9c773 | 2022-10-28 18:56:06 | [diff] [blame] | 12 | 'git status' [<options>] [--] [<pathspec>...] |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 13 | |
| 14 | DESCRIPTION |
| 15 | ----------- |
Junio C Hamano | 942b35e | 2007-12-09 10:19:33 | [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 |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 19 | tracked by Git (and are not ignored by linkgit:gitignore[5]). The first |
Junio C Hamano | 942b35e | 2007-12-09 10:19:33 | [diff] [blame] | 20 | are what you _would_ commit by running `git commit`; the second and |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 21 | third are what you _could_ commit by running 'git add' before running |
Junio C Hamano | 942b35e | 2007-12-09 10:19:33 | [diff] [blame] | 22 | `git commit`. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 23 | |
Junio C Hamano | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 24 | OPTIONS |
| 25 | ------- |
Junio C Hamano | 8fd5230 | 2006-08-10 00:18:08 | [diff] [blame] | 26 | |
Junio C Hamano | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 27 | -s:: |
| 28 | --short:: |
| 29 | Give the output in the short-format. |
| 30 | |
Junio C Hamano | f5de4cf | 2010-06-19 00:33:17 | [diff] [blame] | 31 | -b:: |
| 32 | --branch:: |
| 33 | Show the branch and tracking info even in short-format. |
| 34 | |
Junio C Hamano | 967cda7 | 2017-06-30 21:49:53 | [diff] [blame] | 35 | --show-stash:: |
| 36 | Show the number of entries currently stashed away. |
| 37 | |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 38 | --porcelain[=<version>]:: |
Junio C Hamano | ef5a2f9 | 2011-05-31 19:53:33 | [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 |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 41 | across Git versions and regardless of user configuration. See |
Junio C Hamano | ef5a2f9 | 2011-05-31 19:53:33 | [diff] [blame] | 42 | below for details. |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [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. |
Junio C Hamano | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 46 | |
Junio C Hamano | a129545 | 2012-11-13 22:32:04 | [diff] [blame] | 47 | --long:: |
| 48 | Give the output in the long-format. This is the default. |
| 49 | |
Junio C Hamano | 8152abf | 2015-04-28 22:48:02 | [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 | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 58 | -u[<mode>]:: |
| 59 | --untracked-files[=<mode>]:: |
Junio C Hamano | 36a4dbc | 2011-02-22 07:51:32 | [diff] [blame] | 60 | Show untracked files. |
Junio C Hamano | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 61 | + |
Junio C Hamano | 48cd3f1 | 2019-10-09 05:55:30 | [diff] [blame] | 62 | -- |
Junio C Hamano | 1eb5609 | 2015-10-05 20:39:53 | [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`). |
Junio C Hamano | 48cd3f1 | 2019-10-09 05:55:30 | [diff] [blame] | 66 | |
Junio C Hamano | 36a4dbc | 2011-02-22 07:51:32 | [diff] [blame] | 67 | The possible options are: |
Junio C Hamano | 48cd3f1 | 2019-10-09 05:55:30 | [diff] [blame] | 68 | |
Junio C Hamano | 5e7f131 | 2013-03-21 22:49:01 | [diff] [blame] | 69 | - 'no' - Show no untracked files. |
| 70 | - 'normal' - Shows untracked files and directories. |
Junio C Hamano | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 71 | - 'all' - Also shows individual files in untracked directories. |
Junio C Hamano | 48cd3f1 | 2019-10-09 05:55:30 | [diff] [blame] | 72 | |
Junio C Hamano | 5e7f131 | 2013-03-21 22:49:01 | [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 |
Junio C Hamano | c4e2a20 | 2015-05-26 21:38:47 | [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 | 5e7f131 | 2013-03-21 22:49:01 | [diff] [blame] | 81 | return more quickly without showing untracked files. |
Junio C Hamano | 48cd3f1 | 2019-10-09 05:55:30 | [diff] [blame] | 82 | |
Junio C Hamano | 36a4dbc | 2011-02-22 07:51:32 | [diff] [blame] | 83 | The default can be changed using the status.showUntrackedFiles |
| 84 | configuration variable documented in linkgit:git-config[1]. |
Junio C Hamano | 48cd3f1 | 2019-10-09 05:55:30 | [diff] [blame] | 85 | -- |
Junio C Hamano | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 86 | |
Junio C Hamano | 7d44952 | 2010-07-01 00:08:51 | [diff] [blame] | 87 | --ignore-submodules[=<when>]:: |
| 88 | Ignore changes to submodules when looking for changes. <when> can be |
Junio C Hamano | 619596a | 2010-08-18 22:15:35 | [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 |
| 93 | 'ignore' option in linkgit:git-config[1] or linkgit:gitmodules[5]. When |
Junio C Hamano | 7d44952 | 2010-07-01 00:08:51 | [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 |
Junio C Hamano | 322c624 | 2015-03-23 21:32:46 | [diff] [blame] | 100 | `status.submoduleSummary` is set). |
Junio C Hamano | 7d44952 | 2010-07-01 00:08:51 | [diff] [blame] | 101 | |
Junio C Hamano | b72f603 | 2017-11-15 05:57:08 | [diff] [blame] | 102 | --ignored[=<mode>]:: |
Junio C Hamano | 4c4b012 | 2011-06-30 01:19:32 | [diff] [blame] | 103 | Show ignored files as well. |
Junio C Hamano | b72f603 | 2017-11-15 05:57:08 | [diff] [blame] | 104 | + |
Junio C Hamano | 48cd3f1 | 2019-10-09 05:55:30 | [diff] [blame] | 105 | -- |
Junio C Hamano | b72f603 | 2017-11-15 05:57:08 | [diff] [blame] | 106 | The mode parameter is used to specify the handling of ignored files. |
| 107 | It is optional: it defaults to 'traditional'. |
Junio C Hamano | 48cd3f1 | 2019-10-09 05:55:30 | [diff] [blame] | 108 | |
Junio C Hamano | b72f603 | 2017-11-15 05:57:08 | [diff] [blame] | 109 | The possible options are: |
Junio C Hamano | 48cd3f1 | 2019-10-09 05:55:30 | [diff] [blame] | 110 | |
Junio C Hamano | b72f603 | 2017-11-15 05:57:08 | [diff] [blame] | 111 | - 'traditional' - Shows ignored files and directories, unless |
Junio C Hamano | ea1ac8d | 2018-07-18 20:16:48 | [diff] [blame] | 112 | --untracked-files=all is specified, in which case |
Junio C Hamano | b72f603 | 2017-11-15 05:57:08 | [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. |
Junio C Hamano | 48cd3f1 | 2019-10-09 05:55:30 | [diff] [blame] | 118 | |
Junio C Hamano | 96153bf | 2018-04-25 08:25:34 | [diff] [blame] | 119 | When 'matching' mode is specified, paths that explicitly match an |
Junio C Hamano | b72f603 | 2017-11-15 05:57:08 | [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. |
Junio C Hamano | 48cd3f1 | 2019-10-09 05:55:30 | [diff] [blame] | 124 | -- |
Junio C Hamano | 4c4b012 | 2011-06-30 01:19:32 | [diff] [blame] | 125 | |
Junio C Hamano | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 126 | -z:: |
| 127 | Terminate entries with NUL, instead of LF. This implies |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 128 | the `--porcelain=v1` output format if no other format is given. |
Junio C Hamano | 942b35e | 2007-12-09 10:19:33 | [diff] [blame] | 129 | |
Junio C Hamano | 22700fb | 2012-05-03 23:07:25 | [diff] [blame] | 130 | --column[=<options>]:: |
| 131 | --no-column:: |
| 132 | Display untracked files in columns. See configuration variable |
Junio C Hamano | a372d5b | 2021-02-26 01:34:37 | [diff] [blame] | 133 | `column.status` for option syntax. `--column` and `--no-column` |
Junio C Hamano | 22700fb | 2012-05-03 23:07:25 | [diff] [blame] | 134 | without options are equivalent to 'always' and 'never' |
| 135 | respectively. |
| 136 | |
Junio C Hamano | a25ccc4 | 2018-03-08 21:36:14 | [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 | |
Junio C Hamano | 309465b | 2018-05-30 06:32:59 | [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 | |
Junio C Hamano | 139b7d1 | 2017-10-03 07:10:59 | [diff] [blame] | 152 | <pathspec>...:: |
| 153 | See the 'pathspec' entry in linkgit:gitglossary[7]. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 154 | |
| 155 | OUTPUT |
| 156 | ------ |
| 157 | The output from this command is designed to be used as a commit |
Junio C Hamano | 52b6ba3 | 2014-04-01 00:26:48 | [diff] [blame] | 158 | template comment. |
Junio C Hamano | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 159 | The default, long format, is designed to be human readable, |
Junio C Hamano | ef5a2f9 | 2011-05-31 19:53:33 | [diff] [blame] | 160 | verbose and descriptive. Its contents and format are subject to change |
| 161 | at any time. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 162 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 163 | The paths mentioned in the output, unlike many other Git commands, are |
Junio C Hamano | 942b35e | 2007-12-09 10:19:33 | [diff] [blame] | 164 | made relative to the current directory if you are working in a |
| 165 | subdirectory (this is on purpose, to help cutting and pasting). See |
| 166 | the status.relativePaths config option below. |
Junio C Hamano | 00b8b63 | 2007-12-07 09:50:49 | [diff] [blame] | 167 | |
Junio C Hamano | ef5a2f9 | 2011-05-31 19:53:33 | [diff] [blame] | 168 | Short Format |
| 169 | ~~~~~~~~~~~~ |
| 170 | |
Junio C Hamano | 7b9cce9 | 2018-01-23 22:34:27 | [diff] [blame] | 171 | In the short-format, the status of each path is shown as one of these |
| 172 | forms |
Junio C Hamano | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 173 | |
Junio C Hamano | 7b9cce9 | 2018-01-23 22:34:27 | [diff] [blame] | 174 | XY PATH |
| 175 | XY ORIG_PATH -> PATH |
Junio C Hamano | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 176 | |
Junio C Hamano | 7b9cce9 | 2018-01-23 22:34:27 | [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 | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 180 | |
Junio C Hamano | b76a686 | 2012-05-02 22:02:46 | [diff] [blame] | 181 | The fields (including the `->`) are separated from each other by a |
Junio C Hamano | fc5d735 | 2010-04-24 02:59:11 | [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 | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 186 | |
Junio C Hamano | 7887f9b | 2021-01-25 23:32:33 | [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: |
Junio C Hamano | fc5d735 | 2010-04-24 02:59:11 | [diff] [blame] | 207 | |
| 208 | * ' ' = unmodified |
| 209 | * 'M' = modified |
Junio C Hamano | 7b1585b | 2021-10-14 17:11:58 | [diff] [blame] | 210 | * 'T' = file type changed (regular file, symbolic link or submodule) |
Junio C Hamano | fc5d735 | 2010-04-24 02:59:11 | [diff] [blame] | 211 | * 'A' = added |
| 212 | * 'D' = deleted |
| 213 | * 'R' = renamed |
Junio C Hamano | 7b1585b | 2021-10-14 17:11:58 | [diff] [blame] | 214 | * 'C' = copied (if config option status.renames is set to "copies") |
Junio C Hamano | fc5d735 | 2010-04-24 02:59:11 | [diff] [blame] | 215 | * 'U' = updated but unmerged |
| 216 | |
Junio C Hamano | ace33e4 | 2019-01-18 23:16:05 | [diff] [blame] | 217 | .... |
| 218 | X Y Meaning |
| 219 | ------------------------------------------------- |
| 220 | [AMD] not updated |
Junio C Hamano | 7b1585b | 2021-10-14 17:11:58 | [diff] [blame] | 221 | M [ MTD] updated in index |
| 222 | T [ MTD] type changed in index |
| 223 | A [ MTD] added to index |
Junio C Hamano | ace33e4 | 2019-01-18 23:16:05 | [diff] [blame] | 224 | D deleted from index |
Junio C Hamano | 7b1585b | 2021-10-14 17:11:58 | [diff] [blame] | 225 | R [ MTD] renamed in index |
| 226 | C [ MTD] copied in index |
| 227 | [MTARC] index and work tree matches |
| 228 | [ MTARC] M work tree changed since index |
| 229 | [ MTARC] T type changed in work tree since index |
| 230 | [ MTARC] D deleted in work tree |
| 231 | R renamed in work tree |
| 232 | C copied in work tree |
Junio C Hamano | ace33e4 | 2019-01-18 23:16:05 | [diff] [blame] | 233 | ------------------------------------------------- |
| 234 | D D unmerged, both deleted |
| 235 | A U unmerged, added by us |
| 236 | U D unmerged, deleted by them |
| 237 | U A unmerged, added by them |
| 238 | D U unmerged, deleted by us |
| 239 | A A unmerged, both added |
| 240 | U U unmerged, both modified |
| 241 | ------------------------------------------------- |
| 242 | ? ? untracked |
| 243 | ! ! ignored |
| 244 | ------------------------------------------------- |
| 245 | .... |
Junio C Hamano | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 246 | |
Junio C Hamano | 52a094d | 2017-04-20 05:35:10 | [diff] [blame] | 247 | Submodules have more state and instead report |
| 248 | M the submodule has a different HEAD than |
| 249 | recorded in the index |
| 250 | m the submodule has modified content |
| 251 | ? the submodule has untracked files |
| 252 | since modified content or untracked files in a submodule cannot be added |
| 253 | via `git add` in the superproject to prepare a commit. |
| 254 | |
| 255 | 'm' and '?' are applied recursively. For example if a nested submodule |
| 256 | in a submodule contains an untracked file, this is reported as '?' as well. |
| 257 | |
Junio C Hamano | f5de4cf | 2010-06-19 00:33:17 | [diff] [blame] | 258 | If -b is used the short-format status is preceded by a line |
| 259 | |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 260 | ## branchname tracking info |
Junio C Hamano | f5de4cf | 2010-06-19 00:33:17 | [diff] [blame] | 261 | |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 262 | Porcelain Format Version 1 |
| 263 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ |
Junio C Hamano | ef5a2f9 | 2011-05-31 19:53:33 | [diff] [blame] | 264 | |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 265 | Version 1 porcelain format is similar to the short format, but is guaranteed |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 266 | not to change in a backwards-incompatible way between Git versions or |
Junio C Hamano | ef5a2f9 | 2011-05-31 19:53:33 | [diff] [blame] | 267 | based on user configuration. This makes it ideal for parsing by scripts. |
| 268 | The description of the short format above also describes the porcelain |
| 269 | format, with a few exceptions: |
| 270 | |
| 271 | 1. The user's color.status configuration is not respected; color will |
| 272 | always be off. |
| 273 | |
| 274 | 2. The user's status.relativePaths configuration is not respected; paths |
| 275 | shown will always be relative to the repository root. |
| 276 | |
| 277 | There is also an alternate -z format recommended for machine parsing. In |
Junio C Hamano | fc5d735 | 2010-04-24 02:59:11 | [diff] [blame] | 278 | that format, the status field is the same, but some other things |
Junio C Hamano | ef5a2f9 | 2011-05-31 19:53:33 | [diff] [blame] | 279 | change. First, the '\->' is omitted from rename entries and the field |
| 280 | order is reversed (e.g 'from \-> to' becomes 'to from'). Second, a NUL |
Junio C Hamano | fc5d735 | 2010-04-24 02:59:11 | [diff] [blame] | 281 | (ASCII 0) follows each filename, replacing space as a field separator |
| 282 | and the terminating newline (but a space still separates the status |
| 283 | field from the first filename). Third, filenames containing special |
| 284 | characters are not specially formatted; no quoting or |
Junio C Hamano | bcdb12e | 2012-05-10 18:45:15 | [diff] [blame] | 285 | backslash-escaping is performed. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 286 | |
Junio C Hamano | 52a094d | 2017-04-20 05:35:10 | [diff] [blame] | 287 | Any submodule changes are reported as modified `M` instead of `m` or single `?`. |
| 288 | |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 289 | Porcelain Format Version 2 |
| 290 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 291 | |
| 292 | Version 2 format adds more detailed information about the state of |
| 293 | the worktree and changed items. Version 2 also defines an extensible |
| 294 | set of easy to parse optional headers. |
| 295 | |
| 296 | Header lines start with "#" and are added in response to specific |
| 297 | command line arguments. Parsers should ignore headers they |
| 298 | don't recognize. |
| 299 | |
Junio C Hamano | b551377 | 2019-04-22 03:38:39 | [diff] [blame] | 300 | Branch Headers |
| 301 | ^^^^^^^^^^^^^^ |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 302 | |
| 303 | If `--branch` is given, a series of header lines are printed with |
| 304 | information about the current branch. |
| 305 | |
Junio C Hamano | ace33e4 | 2019-01-18 23:16:05 | [diff] [blame] | 306 | .... |
| 307 | Line Notes |
| 308 | ------------------------------------------------------------ |
| 309 | # branch.oid <commit> | (initial) Current commit. |
| 310 | # branch.head <branch> | (detached) Current branch. |
| 311 | # branch.upstream <upstream_branch> If upstream is set. |
| 312 | # branch.ab +<ahead> -<behind> If upstream is set and |
| 313 | the commit is present. |
| 314 | ------------------------------------------------------------ |
| 315 | .... |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 316 | |
Junio C Hamano | f24d6b5 | 2021-11-29 23:56:22 | [diff] [blame] | 317 | Stash Information |
| 318 | ^^^^^^^^^^^^^^^^^ |
| 319 | |
| 320 | If `--show-stash` is given, one line is printed showing the number of stash |
| 321 | entries if non-zero: |
| 322 | |
| 323 | # stash <N> |
| 324 | |
Junio C Hamano | b551377 | 2019-04-22 03:38:39 | [diff] [blame] | 325 | Changed Tracked Entries |
| 326 | ^^^^^^^^^^^^^^^^^^^^^^^ |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 327 | |
| 328 | Following the headers, a series of lines are printed for tracked |
| 329 | entries. One of three different line formats may be used to describe |
| 330 | an entry depending on the type of change. Tracked entries are printed |
| 331 | in an undefined order; parsers should allow for a mixture of the 3 |
| 332 | line types in any order. |
| 333 | |
| 334 | Ordinary changed entries have the following format: |
| 335 | |
| 336 | 1 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <path> |
| 337 | |
| 338 | Renamed or copied entries have the following format: |
| 339 | |
| 340 | 2 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <X><score> <path><sep><origPath> |
| 341 | |
Junio C Hamano | ace33e4 | 2019-01-18 23:16:05 | [diff] [blame] | 342 | .... |
| 343 | Field Meaning |
| 344 | -------------------------------------------------------- |
| 345 | <XY> A 2 character field containing the staged and |
| 346 | unstaged XY values described in the short format, |
| 347 | with unchanged indicated by a "." rather than |
| 348 | a space. |
| 349 | <sub> A 4 character field describing the submodule state. |
| 350 | "N..." when the entry is not a submodule. |
| 351 | "S<c><m><u>" when the entry is a submodule. |
| 352 | <c> is "C" if the commit changed; otherwise ".". |
| 353 | <m> is "M" if it has tracked changes; otherwise ".". |
| 354 | <u> is "U" if there are untracked changes; otherwise ".". |
| 355 | <mH> The octal file mode in HEAD. |
| 356 | <mI> The octal file mode in the index. |
| 357 | <mW> The octal file mode in the worktree. |
| 358 | <hH> The object name in HEAD. |
| 359 | <hI> The object name in the index. |
| 360 | <X><score> The rename or copy score (denoting the percentage |
| 361 | of similarity between the source and target of the |
| 362 | move or copy). For example "R100" or "C75". |
| 363 | <path> The pathname. In a renamed/copied entry, this |
| 364 | is the target path. |
| 365 | <sep> When the `-z` option is used, the 2 pathnames are separated |
| 366 | with a NUL (ASCII 0x00) byte; otherwise, a tab (ASCII 0x09) |
| 367 | byte separates them. |
| 368 | <origPath> The pathname in the commit at HEAD or in the index. |
| 369 | This is only present in a renamed/copied entry, and |
| 370 | tells where the renamed/copied contents came from. |
| 371 | -------------------------------------------------------- |
| 372 | .... |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 373 | |
| 374 | Unmerged entries have the following format; the first character is |
| 375 | a "u" to distinguish from ordinary changed entries. |
| 376 | |
Junio C Hamano | 05971eb | 2021-10-06 21:18:33 | [diff] [blame] | 377 | u <XY> <sub> <m1> <m2> <m3> <mW> <h1> <h2> <h3> <path> |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 378 | |
Junio C Hamano | ace33e4 | 2019-01-18 23:16:05 | [diff] [blame] | 379 | .... |
| 380 | Field Meaning |
| 381 | -------------------------------------------------------- |
| 382 | <XY> A 2 character field describing the conflict type |
| 383 | as described in the short format. |
| 384 | <sub> A 4 character field describing the submodule state |
| 385 | as described above. |
| 386 | <m1> The octal file mode in stage 1. |
| 387 | <m2> The octal file mode in stage 2. |
| 388 | <m3> The octal file mode in stage 3. |
| 389 | <mW> The octal file mode in the worktree. |
| 390 | <h1> The object name in stage 1. |
| 391 | <h2> The object name in stage 2. |
| 392 | <h3> The object name in stage 3. |
| 393 | <path> The pathname. |
| 394 | -------------------------------------------------------- |
| 395 | .... |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 396 | |
Junio C Hamano | b551377 | 2019-04-22 03:38:39 | [diff] [blame] | 397 | Other Items |
| 398 | ^^^^^^^^^^^ |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 399 | |
| 400 | Following the tracked entries (and if requested), a series of |
| 401 | lines will be printed for untracked and then ignored items |
| 402 | found in the worktree. |
| 403 | |
| 404 | Untracked items have the following format: |
| 405 | |
| 406 | ? <path> |
| 407 | |
| 408 | Ignored items have the following format: |
| 409 | |
| 410 | ! <path> |
| 411 | |
Junio C Hamano | b551377 | 2019-04-22 03:38:39 | [diff] [blame] | 412 | Pathname Format Notes and -z |
| 413 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 414 | |
| 415 | When the `-z` option is given, pathnames are printed as is and |
| 416 | without any quoting and lines are terminated with a NUL (ASCII 0x00) |
| 417 | byte. |
| 418 | |
Junio C Hamano | 0f6f3bf | 2017-03-13 07:01:53 | [diff] [blame] | 419 | Without the `-z` option, pathnames with "unusual" characters are |
| 420 | quoted as explained for the configuration variable `core.quotePath` |
| 421 | (see linkgit:git-config[1]). |
Junio C Hamano | cd45166 | 2016-09-13 00:54:09 | [diff] [blame] | 422 | |
| 423 | |
Junio C Hamano | f9771f6 | 2007-01-17 17:42:30 | [diff] [blame] | 424 | CONFIGURATION |
| 425 | ------------- |
| 426 | |
| 427 | The command honors `color.status` (or `status.color` -- they |
| 428 | mean the same thing and the latter is kept for backward |
| 429 | compatibility) and `color.status.<slot>` configuration variables |
| 430 | to colorize its output. |
| 431 | |
Junio C Hamano | 942b35e | 2007-12-09 10:19:33 | [diff] [blame] | 432 | If the config variable `status.relativePaths` is set to false, then all |
| 433 | paths shown are relative to the repository root, not to the current |
| 434 | directory. |
| 435 | |
Junio C Hamano | 322c624 | 2015-03-23 21:32:46 | [diff] [blame] | 436 | If `status.submoduleSummary` is set to a non zero number or true (identical |
Junio C Hamano | a0fae26 | 2009-12-28 09:33:50 | [diff] [blame] | 437 | to -1 or an unlimited number), the submodule summary will be enabled for |
| 438 | the long format and a summary of commits for modified submodules will be |
Junio C Hamano | 369e340 | 2013-10-15 18:40:25 | [diff] [blame] | 439 | shown (see --summary-limit option of linkgit:git-submodule[1]). Please note |
| 440 | that the summary output from the status command will be suppressed for all |
| 441 | submodules when `diff.ignoreSubmodules` is set to 'all' or only for those |
| 442 | submodules where `submodule.<name>.ignore=all`. To also view the summary for |
| 443 | ignored submodules you can either use the --ignore-submodules=dirty command |
| 444 | line option or the 'git submodule summary' command, which shows a similar |
| 445 | output but does not honor these settings. |
Junio C Hamano | e3ddb5b | 2008-04-21 00:48:07 | [diff] [blame] | 446 | |
Junio C Hamano | 371470a | 2017-12-13 22:26:40 | [diff] [blame] | 447 | BACKGROUND REFRESH |
| 448 | ------------------ |
| 449 | |
| 450 | By default, `git status` will automatically refresh the index, updating |
| 451 | the cached stat information from the working tree and writing out the |
| 452 | result. Writing out the updated index is an optimization that isn't |
| 453 | strictly necessary (`status` computes the values for itself, but writing |
| 454 | them out is just to save subsequent programs from repeating our |
| 455 | computation). When `status` is run in the background, the lock held |
| 456 | during the write may conflict with other simultaneous processes, causing |
| 457 | them to fail. Scripts running `status` in the background should consider |
| 458 | using `git --no-optional-locks status` (see linkgit:git[1] for details). |
| 459 | |
Junio C Hamano | 18ecbd0 | 2022-12-19 03:05:19 | [diff] [blame] | 460 | UNTRACKED FILES AND PERFORMANCE |
| 461 | ------------------------------- |
| 462 | |
| 463 | `git status` can be very slow in large worktrees if/when it |
| 464 | needs to search for untracked files and directories. There are |
| 465 | many configuration options available to speed this up by either |
| 466 | avoiding the work or making use of cached results from previous |
| 467 | Git commands. There is no single optimum set of settings right |
| 468 | for everyone. We'll list a summary of the relevant options to help |
| 469 | you, but before going into the list, you may want to run `git status` |
| 470 | again, because your configuration may already be caching `git status` |
| 471 | results, so it could be faster on subsequent runs. |
| 472 | |
| 473 | * The `--untracked-files=no` flag or the |
| 474 | `status.showUntrackedfiles=false` config (see above for both): |
| 475 | indicate that `git status` should not report untracked |
| 476 | files. This is the fastest option. `git status` will not list |
| 477 | the untracked files, so you need to be careful to remember if |
| 478 | you create any new files and manually `git add` them. |
| 479 | |
| 480 | * `advice.statusUoption=false` (see linkgit:git-config[1]): |
| 481 | setting this variable to `false` disables the warning message |
| 482 | given when enumerating untracked files takes more than 2 |
| 483 | seconds. In a large project, it may take longer and the user |
| 484 | may have already accepted the trade off (e.g. using "-uno" may |
| 485 | not be an acceptable option for the user), in which case, there |
| 486 | is no point issuing the warning message, and in such a case, |
| 487 | disabling the warning may be the best. |
| 488 | |
| 489 | * `core.untrackedCache=true` (see linkgit:git-update-index[1]): |
| 490 | enable the untracked cache feature and only search directories |
| 491 | that have been modified since the previous `git status` command. |
| 492 | Git remembers the set of untracked files within each directory |
| 493 | and assumes that if a directory has not been modified, then |
| 494 | the set of untracked files within has not changed. This is much |
| 495 | faster than enumerating the contents of every directory, but still |
| 496 | not without cost, because Git still has to search for the set of |
| 497 | modified directories. The untracked cache is stored in the |
| 498 | `.git/index` file. The reduced cost of searching for untracked |
| 499 | files is offset slightly by the increased size of the index and |
| 500 | the cost of keeping it up-to-date. That reduced search time is |
| 501 | usually worth the additional size. |
| 502 | |
| 503 | * `core.untrackedCache=true` and `core.fsmonitor=true` or |
| 504 | `core.fsmonitor=<hook_command_pathname>` (see |
| 505 | linkgit:git-update-index[1]): enable both the untracked cache |
| 506 | and FSMonitor features and only search directories that have |
| 507 | been modified since the previous `git status` command. This |
| 508 | is faster than using just the untracked cache alone because |
| 509 | Git can also avoid searching for modified directories. Git |
| 510 | only has to enumerate the exact set of directories that have |
| 511 | changed recently. While the FSMonitor feature can be enabled |
| 512 | without the untracked cache, the benefits are greatly reduced |
| 513 | in that case. |
| 514 | |
| 515 | Note that after you turn on the untracked cache and/or FSMonitor |
| 516 | features it may take a few `git status` commands for the various |
| 517 | caches to warm up before you see improved command times. This is |
| 518 | normal. |
| 519 | |
Junio C Hamano | 9049d91 | 2008-05-29 02:09:50 | [diff] [blame] | 520 | SEE ALSO |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 521 | -------- |
Junio C Hamano | 35738e8 | 2008-01-07 07:55:46 | [diff] [blame] | 522 | linkgit:gitignore[5] |
Junio C Hamano | f9771f6 | 2007-01-17 17:42:30 | [diff] [blame] | 523 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 524 | GIT |
| 525 | --- |
Junio C Hamano | f7c042d | 2008-06-06 22:50:53 | [diff] [blame] | 526 | Part of the linkgit:git[1] suite |