grep: move logic to compile header pattern into a separate helper
[git/dkf.git] / Documentation / git-status.txt
blob2fd054c1040ce43949382e4744a0d7a814a8d9bd
1 git-status(1)
2 =============
4 NAME
5 ----
6 git-status - Show the working tree status
9 SYNOPSIS
10 --------
11 'git status' [<options>...] [--] [<pathspec>...]
13 DESCRIPTION
14 -----------
15 Displays paths that have differences between the index file and the
16 current HEAD commit, paths that have differences between the working
17 tree and the index file, and paths in the working tree that are not
18 tracked by git (and are not ignored by linkgit:gitignore[5]). The first
19 are what you _would_ commit by running `git commit`; the second and
20 third are what you _could_ commit by running 'git add' before running
21 `git commit`.
23 OPTIONS
24 -------
26 -s::
27 --short::
28         Give the output in the short-format.
30 -b::
31 --branch::
32         Show the branch and tracking info even in short-format.
34 --porcelain::
35         Give the output in a stable, easy-to-parse format for scripts.
36         Currently this is identical to --short output, but is guaranteed
37         not to change in the future, making it safe for scripts.
39 -u[<mode>]::
40 --untracked-files[=<mode>]::
41         Show untracked files (Default: 'all').
43 The mode parameter is optional, and is used to specify
44 the handling of untracked files. The possible options are:
47         - 'no'     - Show no untracked files
48         - 'normal' - Shows untracked files and directories
49         - 'all'    - Also shows individual files in untracked directories.
52 See linkgit:git-config[1] for configuration variable
53 used to change the default for when the option is not
54 specified.
56 --ignore-submodules[=<when>]::
57         Ignore changes to submodules when looking for changes. <when> can be
58         either "untracked", "dirty" or "all", which is the default. When
59         "untracked" is used submodules are not considered dirty when they only
60         contain untracked content (but they are still scanned for modified
61         content). Using "dirty" ignores all changes to the work tree of submodules,
62         only changes to the commits stored in the superproject are shown (this was
63         the behavior before 1.7.0). Using "all" hides all changes to submodules
64         (and suppresses the output of submodule summaries when the config option
65         `status.submodulesummary` is set).
67 -z::
68         Terminate entries with NUL, instead of LF.  This implies
69         the `--porcelain` output format if no other format is given.
72 OUTPUT
73 ------
74 The output from this command is designed to be used as a commit
75 template comment, and all the output lines are prefixed with '#'.
76 The default, long format, is designed to be human readable,
77 verbose and descriptive.  They are subject to change in any time.
79 The paths mentioned in the output, unlike many other git commands, are
80 made relative to the current directory if you are working in a
81 subdirectory (this is on purpose, to help cutting and pasting). See
82 the status.relativePaths config option below.
84 In short-format, the status of each path is shown as
86         XY PATH1 -> PATH2
88 where `PATH1` is the path in the `HEAD`, and ` -> PATH2` part is
89 shown only when `PATH1` corresponds to a different path in the
90 index/worktree (i.e. the file is renamed). The 'XY' is a two-letter
91 status code.
93 The fields (including the `->`) are separated from each other by a
94 single space. If a filename contains whitespace or other nonprintable
95 characters, that field will be quoted in the manner of a C string
96 literal: surrounded by ASCII double quote (34) characters, and with
97 interior special characters backslash-escaped.
99 For paths with merge conflicts, `X` and 'Y' show the modification
100 states of each side of the merge. For paths that do not have merge
101 conflicts, `X` shows the status of the index, and `Y` shows the status
102 of the work tree.  For untracked paths, `XY` are `??`.  Other status
103 codes can be interpreted as follows:
105 * ' ' = unmodified
106 * 'M' = modified
107 * 'A' = added
108 * 'D' = deleted
109 * 'R' = renamed
110 * 'C' = copied
111 * 'U' = updated but unmerged
113 Ignored files are not listed.
115     X          Y     Meaning
116     -------------------------------------------------
117               [MD]   not updated
118     M        [ MD]   updated in index
119     A        [ MD]   added to index
120     D         [ M]   deleted from index
121     R        [ MD]   renamed in index
122     C        [ MD]   copied in index
123     [MARC]           index and work tree matches
124     [ MARC]     M    work tree changed since index
125     [ MARC]     D    deleted in work tree
126     -------------------------------------------------
127     D           D    unmerged, both deleted
128     A           U    unmerged, added by us
129     U           D    unmerged, deleted by them
130     U           A    unmerged, added by them
131     D           U    unmerged, deleted by us
132     A           A    unmerged, both added
133     U           U    unmerged, both modified
134     -------------------------------------------------
135     ?           ?    untracked
136     -------------------------------------------------
138 If -b is used the short-format status is preceded by a line
140 ## branchname tracking info
142 There is an alternate -z format recommended for machine parsing.  In
143 that format, the status field is the same, but some other things
144 change.  First, the '->' is omitted from rename entries and the field
145 order is reversed (e.g 'from -> to' becomes 'to from'). Second, a NUL
146 (ASCII 0) follows each filename, replacing space as a field separator
147 and the terminating newline (but a space still separates the status
148 field from the first filename).  Third, filenames containing special
149 characters are not specially formatted; no quoting or
150 backslash-escaping is performed. Fourth, there is no branch line.
152 CONFIGURATION
153 -------------
155 The command honors `color.status` (or `status.color` -- they
156 mean the same thing and the latter is kept for backward
157 compatibility) and `color.status.<slot>` configuration variables
158 to colorize its output.
160 If the config variable `status.relativePaths` is set to false, then all
161 paths shown are relative to the repository root, not to the current
162 directory.
164 If `status.submodulesummary` is set to a non zero number or true (identical
165 to -1 or an unlimited number), the submodule summary will be enabled for
166 the long format and a summary of commits for modified submodules will be
167 shown (see --summary-limit option of linkgit:git-submodule[1]).
169 SEE ALSO
170 --------
171 linkgit:gitignore[5]
173 Author
174 ------
175 Written by Junio C Hamano <gitster@pobox.com>.
177 Documentation
178 --------------
179 Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
183 Part of the linkgit:git[1] suite