2005-05-11 01:32:30 +04:00
|
|
|
git-diff-tree(1)
|
|
|
|
================
|
|
|
|
|
|
|
|
NAME
|
|
|
|
----
|
|
|
|
git-diff-tree - Compares the content and mode of blobs found via two tree objects
|
|
|
|
|
|
|
|
|
|
|
|
SYNOPSIS
|
|
|
|
--------
|
2005-12-31 20:37:15 +03:00
|
|
|
[verse]
|
2008-06-30 10:09:04 +04:00
|
|
|
'git diff-tree' [--stdin] [-m] [-s] [-v] [--no-commit-id] [--pretty]
|
2020-09-14 21:36:52 +03:00
|
|
|
[-t] [-r] [-c | --cc] [--combined-all-paths] [--root] [--merge-base]
|
2021-11-06 21:48:52 +03:00
|
|
|
[<common-diff-options>] <tree-ish> [<tree-ish>] [<path>...]
|
2005-05-11 01:32:30 +04:00
|
|
|
|
|
|
|
DESCRIPTION
|
|
|
|
-----------
|
|
|
|
Compares the content and mode of the blobs found via two tree objects.
|
|
|
|
|
2005-09-23 14:06:04 +04:00
|
|
|
If there is only one <tree-ish> given, the commit is compared with its parents
|
|
|
|
(see --stdin below).
|
|
|
|
|
2010-01-10 02:33:00 +03:00
|
|
|
Note that 'git diff-tree' can use the tree encapsulated in a commit object.
|
2005-05-11 01:32:30 +04:00
|
|
|
|
|
|
|
OPTIONS
|
|
|
|
-------
|
2005-07-13 23:52:35 +04:00
|
|
|
include::diff-options.txt[]
|
|
|
|
|
2005-05-11 01:32:30 +04:00
|
|
|
<tree-ish>::
|
|
|
|
The id of a tree object.
|
|
|
|
|
2005-06-20 00:14:53 +04:00
|
|
|
<path>...::
|
2005-05-11 01:32:30 +04:00
|
|
|
If provided, the results are limited to a subset of files
|
2019-02-04 13:36:18 +03:00
|
|
|
matching one of the provided pathspecs.
|
2005-05-11 01:32:30 +04:00
|
|
|
|
2005-10-28 21:04:49 +04:00
|
|
|
-r::
|
|
|
|
recurse into sub-trees
|
|
|
|
|
2005-05-25 10:24:22 +04:00
|
|
|
-t::
|
|
|
|
show tree entry itself as well as subtrees. Implies -r.
|
|
|
|
|
2005-05-28 18:42:17 +04:00
|
|
|
--root::
|
2016-06-28 14:40:11 +03:00
|
|
|
When `--root` is specified the initial commit will be shown as a big
|
2005-05-28 18:42:17 +04:00
|
|
|
creation event. This is equivalent to a diff against the NULL tree.
|
|
|
|
|
2020-09-14 21:36:52 +03:00
|
|
|
--merge-base::
|
|
|
|
Instead of comparing the <tree-ish>s directly, use the merge
|
|
|
|
base between the two <tree-ish>s as the "before" side. There
|
|
|
|
must be two <tree-ish>s given and they must both be commits.
|
|
|
|
|
2005-05-11 01:32:30 +04:00
|
|
|
--stdin::
|
2016-06-28 14:40:11 +03:00
|
|
|
When `--stdin` is specified, the command does not take
|
2005-05-11 01:32:30 +04:00
|
|
|
<tree-ish> arguments from the command line. Instead, it
|
Teach git diff-tree --stdin to diff trees
When feeding trees on the command line, you can give exactly two
trees, not three nor one; --stdin now supports this "two tree" form on
its input, in addition to accepting lines with one or more commits.
When diffing trees (either specified on the command line or from the
standard input), the -s, -v, --pretty, --abbrev-commit, --encoding,
--no-commit-id, and --always options are ignored, since they do not
apply to trees; and the -m, -c, and --cc options are ignored since
they would be meaningful only with three or more trees, which is not
supported (yet).
Signed-off-by: Karl Hasselström <kha@treskal.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-10 20:12:58 +04:00
|
|
|
reads lines containing either two <tree>, one <commit>, or a
|
|
|
|
list of <commit> from its standard input. (Use a single space
|
|
|
|
as separator.)
|
2005-05-11 01:32:30 +04:00
|
|
|
+
|
Teach git diff-tree --stdin to diff trees
When feeding trees on the command line, you can give exactly two
trees, not three nor one; --stdin now supports this "two tree" form on
its input, in addition to accepting lines with one or more commits.
When diffing trees (either specified on the command line or from the
standard input), the -s, -v, --pretty, --abbrev-commit, --encoding,
--no-commit-id, and --always options are ignored, since they do not
apply to trees; and the -m, -c, and --cc options are ignored since
they would be meaningful only with three or more trees, which is not
supported (yet).
Signed-off-by: Karl Hasselström <kha@treskal.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-10 20:12:58 +04:00
|
|
|
When two trees are given, it compares the first tree with the second.
|
2008-08-10 20:12:53 +04:00
|
|
|
When a single commit is given, it compares the commit with its
|
|
|
|
parents. The remaining commits, when given, are used as if they are
|
2008-08-06 09:32:28 +04:00
|
|
|
parents of the first commit.
|
2008-08-10 20:12:53 +04:00
|
|
|
+
|
Teach git diff-tree --stdin to diff trees
When feeding trees on the command line, you can give exactly two
trees, not three nor one; --stdin now supports this "two tree" form on
its input, in addition to accepting lines with one or more commits.
When diffing trees (either specified on the command line or from the
standard input), the -s, -v, --pretty, --abbrev-commit, --encoding,
--no-commit-id, and --always options are ignored, since they do not
apply to trees; and the -m, -c, and --cc options are ignored since
they would be meaningful only with three or more trees, which is not
supported (yet).
Signed-off-by: Karl Hasselström <kha@treskal.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-10 20:12:58 +04:00
|
|
|
When comparing two trees, the ID of both trees (separated by a space
|
|
|
|
and terminated by a newline) is printed before the difference. When
|
|
|
|
comparing commits, the ID of the first (or only) commit, followed by a
|
|
|
|
newline, is printed.
|
2008-08-10 20:12:53 +04:00
|
|
|
+
|
2008-12-19 15:14:18 +03:00
|
|
|
The following flags further affect the behavior when comparing
|
Teach git diff-tree --stdin to diff trees
When feeding trees on the command line, you can give exactly two
trees, not three nor one; --stdin now supports this "two tree" form on
its input, in addition to accepting lines with one or more commits.
When diffing trees (either specified on the command line or from the
standard input), the -s, -v, --pretty, --abbrev-commit, --encoding,
--no-commit-id, and --always options are ignored, since they do not
apply to trees; and the -m, -c, and --cc options are ignored since
they would be meaningful only with three or more trees, which is not
supported (yet).
Signed-off-by: Karl Hasselström <kha@treskal.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-10 20:12:58 +04:00
|
|
|
commits (but not trees).
|
2005-05-11 01:32:30 +04:00
|
|
|
|
|
|
|
-m::
|
2010-01-10 02:33:00 +03:00
|
|
|
By default, 'git diff-tree --stdin' does not show
|
2005-05-11 01:32:30 +04:00
|
|
|
differences for merge commits. With this flag, it shows
|
2006-04-09 17:43:17 +04:00
|
|
|
differences to that commit from all of its parents. See
|
2016-06-28 14:40:10 +03:00
|
|
|
also `-c`.
|
2005-05-11 01:32:30 +04:00
|
|
|
|
|
|
|
-s::
|
2010-01-10 02:33:00 +03:00
|
|
|
By default, 'git diff-tree --stdin' shows differences,
|
2016-06-28 14:40:10 +03:00
|
|
|
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.
|
2005-05-11 01:32:30 +04:00
|
|
|
|
|
|
|
-v::
|
2010-01-10 02:33:00 +03:00
|
|
|
This flag causes 'git diff-tree --stdin' to also show
|
2005-05-11 01:32:30 +04:00
|
|
|
the commit message before the differences.
|
|
|
|
|
2007-05-14 03:25:45 +04:00
|
|
|
include::pretty-options.txt[]
|
2005-06-20 00:14:53 +04:00
|
|
|
|
2005-11-10 08:30:12 +03:00
|
|
|
--no-commit-id::
|
2010-01-10 02:33:00 +03:00
|
|
|
'git diff-tree' outputs a line with the commit ID when
|
2005-11-10 08:30:12 +03:00
|
|
|
applicable. This flag suppressed the commit ID output.
|
|
|
|
|
2006-04-09 17:43:17 +04:00
|
|
|
-c::
|
|
|
|
This flag changes the way a merge commit is displayed
|
2006-01-28 13:19:22 +03:00
|
|
|
(which means it is useful only when the command is given
|
2016-06-28 14:40:11 +03:00
|
|
|
one <tree-ish>, or `--stdin`). It shows the differences
|
2006-04-09 17:43:17 +04:00
|
|
|
from each of the parents to the merge result simultaneously
|
|
|
|
instead of showing pairwise diff between a parent and the
|
2016-06-28 14:40:10 +03:00
|
|
|
result one at a time (which is what the `-m` option does).
|
2006-04-09 17:43:17 +04:00
|
|
|
Furthermore, it lists only files which were modified
|
|
|
|
from all parents.
|
|
|
|
|
2006-05-03 14:51:40 +04:00
|
|
|
--cc::
|
2006-04-09 17:43:17 +04:00
|
|
|
This flag changes the way a merge commit patch is displayed,
|
2016-06-28 14:40:10 +03:00
|
|
|
in a similar way to the `-c` option. It implies the `-c`
|
|
|
|
and `-p` options and further compresses the patch output
|
2008-07-24 03:16:05 +04:00
|
|
|
by omitting uninteresting hunks whose the contents in the parents
|
|
|
|
have only two variants and the merge result picks one of them
|
|
|
|
without modification. When all hunks are uninteresting, the commit
|
|
|
|
itself and the commit log message is not shown, just like in any other
|
|
|
|
"empty diff" case.
|
2006-01-28 13:19:22 +03:00
|
|
|
|
log,diff-tree: add --combined-all-paths option
The combined diff format for merges will only list one filename, even if
rename or copy detection is active. For example, with raw format one
might see:
::100644 100644 100644 fabadb8 cc95eb0 4866510 MM describe.c
::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM bar.sh
::100644 100644 100644 e07d6c5 9042e82 ee91881 RR phooey.c
This doesn't let us know what the original name of bar.sh was in the
first parent, and doesn't let us know what either of the original names
of phooey.c were in either of the parents. In contrast, for non-merge
commits, raw format does provide original filenames (and a rename score
to boot). In order to also provide original filenames for merge
commits, add a --combined-all-paths option (which must be used with
either -c or --cc, and is likely only useful with rename or copy
detection active) so that we can print tab-separated filenames when
renames are involved. This transforms the above output to:
::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c desc.c desc.c
::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM foo.sh bar.sh bar.sh
::100644 100644 100644 e07d6c5 9042e82 ee91881 RR fooey.c fuey.c phooey.c
Further, in patch format, this changes the from/to headers so that
instead of just having one "from" header, we get one for each parent.
For example, instead of having
--- a/phooey.c
+++ b/phooey.c
we would see
--- a/fooey.c
--- a/fuey.c
+++ b/phooey.c
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-02-08 04:12:46 +03:00
|
|
|
--combined-all-paths::
|
|
|
|
This flag causes combined diffs (used for merge commits) to
|
|
|
|
list the name of the file from all parents. It thus only has
|
|
|
|
effect when -c or --cc are specified, and is likely only
|
|
|
|
useful if filename changes are detected (i.e. when either
|
|
|
|
rename or copy detection have been requested).
|
|
|
|
|
2006-02-07 14:47:44 +03:00
|
|
|
--always::
|
|
|
|
Show the commit itself and the commit log message even
|
|
|
|
if the diff itself is empty.
|
|
|
|
|
2005-05-11 01:32:30 +04:00
|
|
|
|
2007-05-14 03:25:45 +04:00
|
|
|
include::pretty-formats.txt[]
|
2019-03-29 15:35:15 +03:00
|
|
|
|
2005-05-11 01:32:30 +04:00
|
|
|
include::diff-format.txt[]
|
|
|
|
|
|
|
|
GIT
|
|
|
|
---
|
2008-06-06 11:07:32 +04:00
|
|
|
Part of the linkgit:git[1] suite
|