.SH "SYNOPSIS"
.nf
-git\-diff\-tree [\-\-stdin] [\-m] [\-s] [\-v] [\-\-no\-commit\-id] [\-\-pretty]
+\fIgit\-diff\-tree\fR [\-\-stdin] [\-m] [\-s] [\-v] [\-\-no\-commit\-id] [\-\-pretty]
[\-t] [\-r] [\-c | \-\-cc] [\-\-root] [<common diff options>]
<tree\-ish> [<tree\-ish>] [<path>...]
.fi
.TP
\-\-root
-When \-\-root is specified the initial commit will be showed as a big creation event\&. This is equivalent to a diff against the NULL tree\&.
+When \fI\-\-root\fR is specified the initial commit will be showed as a big creation event\&. This is equivalent to a diff against the NULL tree\&.
.TP
\-\-stdin
-When \-\-stdin is specified, the command does not take <tree\-ish> arguments from the command line\&. Instead, it reads either one <commit> or a pair of <tree\-ish> separated with a single space from its standard input\&.
+When \fI\-\-stdin\fR is specified, the command does not take <tree\-ish> arguments from the command line\&. Instead, it reads either one <commit> or a pair of <tree\-ish> separated with a single space from its standard input\&.
When a single commit is given on one line of such input, it compares the commit with its parents\&. The following flags further affects its behaviour\&. This does not apply to the case where two <tree\-ish> separated with a single space are given\&.
.TP
\-s
-By default, "git\-diff\-tree \-\-stdin" shows differences, either in machine\-readable form (without \-p) or in patch form (with \-p)\&. This output can be suppressed\&. It is only useful with \-v flag\&.
+By default, "git\-diff\-tree \-\-stdin" shows differences, either in machine\-readable form (without \fI\-p\fR) or in patch form (with \fI\-p\fR)\&. This output can be suppressed\&. It is only useful with \fI\-v\fR flag\&.
.TP
\-v
.TP
\-c,\-\-cc
-These flags change the way a merge commit is displayed (which means it is useful only when the command is given one <tree\-ish>, or \-\-stdin)\&. It shows the differences from each of the parents to the merge result simultaneously, instead of showing pairwise diff between a parent and the result one at a time, which \-m option output does\&. \-\-cc further compresses the output by omiting hunks that show differences from only one parent, or show the same change from all but one parent for an Octopus merge\&. When this optimization makes all hunks disappear, the commit itself and the commit log message is not shown, just like any other "empty diff" cases\&.
+These flags change the way a merge commit is displayed (which means it is useful only when the command is given one <tree\-ish>, or \fI\-\-stdin\fR)\&. It shows the differences from each of the parents to the merge result simultaneously, instead of showing pairwise diff between a parent and the result one at a time, which \fI\-m\fR option output does\&. \fI\-\-cc\fR further compresses the output by omiting hunks that show differences from only one parent, or show the same change from all but one parent for an Octopus merge\&. When this optimization makes all hunks disappear, the commit itself and the commit log message is not shown, just like any other "empty diff" cases\&.
+
+.TP
+\-\-always
+Show the commit itself and the commit log message even if the diff itself is empty\&.
.SH "LIMITING OUTPUT"
status, followed by optional "score" number\&.
.TP
11.
-a tab or a NUL when \-z option is used\&.
+a tab or a NUL when \fI\-z\fR option is used\&.
.TP
12.
path for "src"
.TP
13.
-a tab or a NUL when \-z option is used; only exists for C or R\&.
+a tab or a NUL when \fI\-z\fR option is used; only exists for C or R\&.
.TP
14.
path for "dst"; only exists for C or R\&.
.TP
15.
-an LF or a NUL when \-z option is used, to terminate the record\&.
+an LF or a NUL when \fI\-z\fR option is used, to terminate the record\&.
.LP
.SH "GENERATING PATCHES WITH -P"
-When "git\-diff\-index", "git\-diff\-tree", or "git\-diff\-files" are run with a \-p option, they do not produce the output described above; instead they produce a patch file\&.
+When "git\-diff\-index", "git\-diff\-tree", or "git\-diff\-files" are run with a \fI\-p\fR option, they do not produce the output described above; instead they produce a patch file\&.
The patch generation can be customized at two levels\&.
.TP 3
1.
-When the environment variable GIT_EXTERNAL_DIFF is not set, these commands internally invoke "diff" like this:
+When the environment variable \fIGIT_EXTERNAL_DIFF\fR is not set, these commands internally invoke "diff" like this:
.nf
.fi
For added files, /dev/null is used for <old>\&. For removed files, /dev/null is used for <new>
-The "diff" formatting options can be customized via the environment variable GIT_DIFF_OPTS\&. For example, if you prefer context diff:
+The "diff" formatting options can be customized via the environment variable \fIGIT_DIFF_OPTS\fR\&. For example, if you prefer context diff:
.nf
GIT_DIFF_OPTS=\-c git\-diff\-index \-p HEAD
.fi
.TP
2.
-When the environment variable GIT_EXTERNAL_DIFF is set, the program named by it is called, instead of the diff invocation described above\&.
+When the environment variable \fIGIT_EXTERNAL_DIFF\fR is set, the program named by it is called, instead of the diff invocation described above\&.
-For a path that is added, removed, or modified, GIT_EXTERNAL_DIFF is called with 7 parameters:
+For a path that is added, removed, or modified, \fIGIT_EXTERNAL_DIFF\fR is called with 7 parameters:
.nf
where:
<old|new>\-file
+
are files GIT_EXTERNAL_DIFF can use to read the contents of <old|new>,
+
<old|new>\-hex
+
are the 40\-hexdigit SHA1 hashes,
+
<old|new>\-mode
+
are the octal representation of the file modes\&.
-The file parameters can point at the user's working file (e\&.g\&. new\-file in "git\-diff\-files"), /dev/null (e\&.g\&. old\-file when a new file is added), or a temporary file (e\&.g\&. old\-file in the index)\&. GIT_EXTERNAL_DIFF should not worry about unlinking the temporary file \-\-\- it is removed when GIT_EXTERNAL_DIFF exits\&.
+
+The file parameters can point at the user's working file (e\&.g\&. new\-file in "git\-diff\-files"), /dev/null (e\&.g\&. old\-file when a new file is added), or a temporary file (e\&.g\&. old\-file in the index)\&. \fIGIT_EXTERNAL_DIFF\fR should not worry about unlinking the temporary file \-\-\- it is removed when \fIGIT_EXTERNAL_DIFF\fR exits\&.
.LP
-For a path that is unmerged, GIT_EXTERNAL_DIFF is called with 1 parameter, <path>\&.
+For a path that is unmerged, \fIGIT_EXTERNAL_DIFF\fR is called with 1 parameter, <path>\&.
.SH "GIT SPECIFIC EXTENSION TO DIFF FORMAT"
.SH "COMBINED DIFF FORMAT"
-git\-diff\-tree and git\-diff\-files can take \-c or \-\-cc option to produce combined diff, which looks like this:
+git\-diff\-tree and git\-diff\-files can take \fI\-c\fR or \fI\-\-cc\fR option to produce \fIcombined diff\fR, which looks like this:
.IP
diff \-\-combined describe\&.c
+ unsigned char sha1[20];
+ struct commit *cmit;
-Unlike the traditional unified diff format, which shows two files A and B with a single column that has \- (minus -- appears in A but removed in B), + (plus -- missing in A but added to B), or (space -- unchanged) prefix, this format compares two or more files file1, file2,... with one file X, and shows how X differs from each of fileN\&. One column for each of fileN is prepended to the output line to note how X's line is different from it\&.
+Unlike the traditional \fIunified\fR diff format, which shows two files A and B with a single column that has \- (minus -- appears in A but removed in B), + (plus -- missing in A but added to B), or (space -- unchanged) prefix, this format compares two or more files file1, file2,... with one file X, and shows how X differs from each of fileN\&. One column for each of fileN is prepended to the output line to note how X's line is different from it\&.
A \- character in the column N means that the line appears in fileN but it does not appear in the last file\&. A + character in the column N means that the line appears in the last file, and fileN does not have that line\&.