1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-09 23:06:09 +02:00

docs: rephrase and clarify the git status --short format

The table describing the porcelain format in git-status(1) is helpful,
but it's not completely clear what the three sections mean, even to
some contributors.  As a result, users are unable to find how to detect
common cases like merge conflicts programmatically.

Let's improve this situation by rephrasing to be more explicit about
what each of the sections in the table means, to tell users in plain
language which cases are occurring, and to describe what "unmerged"
means.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
brian m. carlson 2021-01-10 19:04:48 +00:00 committed by Junio C Hamano
parent 71ca53e812
commit 4eb56b56e7

View File

@ -184,11 +184,26 @@ characters, that field will be quoted in the manner of a C string
literal: surrounded by ASCII double quote (34) characters, and with
interior special characters backslash-escaped.
For paths with merge conflicts, `X` and `Y` show the modification
states of each side of the merge. For paths that do not have merge
conflicts, `X` shows the status of the index, and `Y` shows the status
of the work tree. For untracked paths, `XY` are `??`. Other status
codes can be interpreted as follows:
There are three different types of states that are shown using this format, and
each one uses the `XY` syntax differently:
* When a merge is occurring and the merge was successful, or outside of a merge
situation, `X` shows the status of the index and `Y` shows the status of the
working tree.
* When a merge conflict has occurred and has not yet been resolved, `X` and `Y`
show the state introduced by each head of the merge, relative to the common
ancestor. These paths are said to be _unmerged_.
* When a path is untracked, `X` and `Y` are always the same, since they are
unknown to the index. `??` is used for untracked paths. Ignored files are
not listed unless `--ignored` is used; if it is, ignored files are indicated
by `!!`.
Note that the term _merge_ here also includes rebases using the default
`--merge` strategy, cherry-picks, and anything else using the merge machinery.
In the following table, these three classes are shown in separate sections, and
these characters are used for `X` and `Y` fields for the first two sections that
show tracked paths:
* ' ' = unmodified
* 'M' = modified
@ -198,9 +213,6 @@ codes can be interpreted as follows:
* 'C' = copied
* 'U' = updated but unmerged
Ignored files are not listed, unless `--ignored` option is in effect,
in which case `XY` are `!!`.
....
X Y Meaning
-------------------------------------------------