сравните дерево с рабочим деревом или индексом (Compare a tree to the working tree or index)
Создание текста патча с -P (Generating patch text with -p)
Running git-diff(1), git-log(1), git-show(1), git-diff-index(1),
git-diff-tree(1), or git-diff-files(1) with the -p
option
produces patch text. You can customize the creation of patch text
via the GIT_EXTERNAL_DIFF
and the GIT_DIFF_OPTS
environment
variables (see git(1)), and the diff
attribute (see
gitattributes(5)).
What the -p option produces is slightly different from the
traditional diff format:
1. It is preceded with a "git diff" header that looks like this:
diff --git a/file1 b/file2
The a/
and b/
filenames are the same unless rename/copy is
involved. Especially, even for a creation or a deletion,
/dev/null
is not used in place of the a/
or b/
filenames.
When rename/copy is involved, file1
and file2
show the name
of the source file of the rename/copy and the name of the
file that rename/copy produces, respectively.
2. It is followed by one or more extended header lines:
old mode <mode>
new mode <mode>
deleted file mode <mode>
new file mode <mode>
copy from <path>
copy to <path>
rename from <path>
rename to <path>
similarity index <number>
dissimilarity index <number>
index <hash>..<hash> <mode>
File modes are printed as 6-digit octal numbers including the
file type and file permission bits.
Path names in extended headers do not include the a/
and b/
prefixes.
The similarity index is the percentage of unchanged lines,
and the dissimilarity index is the percentage of changed
lines. It is a rounded down integer, followed by a percent
sign. The similarity index value of 100% is thus reserved for
two equal files, while 100% dissimilarity means that no line
from the old file made it into the new one.
The index line includes the blob object names before and
after the change. The <mode> is included if the file mode
does not change; otherwise, separate lines indicate the old
and the new mode.
3. Pathnames with "unusual" characters are quoted as explained
for the configuration variable core.quotePath
(see
git-config(1)).
4. All the file1
files in the output refer to files before the
commit, and all the file2
files refer to files after the
commit. It is incorrect to apply each change to each file
sequentially. For example, this patch will swap a and b:
diff --git a/a b/b
rename from a
rename to b
diff --git a/b b/a
rename from b
rename to a
5. Hunk headers mention the name of the function to which the
hunk applies. See "Defining a custom hunk-header" in
gitattributes(5) for details of how to tailor to this to
specific languages.