]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-diff.txt
Documentation: avoid poor-man's small caps GIT
[thirdparty/git.git] / Documentation / git-diff.txt
CommitLineData
215a7ad1
JH
1git-diff(1)
2===========
7fc9d69f
JH
3
4NAME
5----
7bd7f280 6git-diff - Show changes between commits, commit and working tree, etc
7fc9d69f
JH
7
8
9SYNOPSIS
10--------
49bd56a5
JK
11[verse]
12'git diff' [options] [<commit>] [--] [<path>...]
13'git diff' [options] --cached [<commit>] [--] [<path>...]
14'git diff' [options] <commit> <commit> [--] [<path>...]
bd52900d 15'git diff' [options] <blob> <blob>
49bd56a5 16'git diff' [options] [--no-index] [--] <path> <path>
7fc9d69f
JH
17
18DESCRIPTION
19-----------
49bd56a5
JK
20Show changes between the working tree and the index or a tree, changes
21between the index and a tree, changes between two trees, or changes
22between two files on disk.
35ef3a4c 23
b1889c36 24'git diff' [--options] [--] [<path>...]::
dfa2f22f 25
f5e6b89b
JH
26 This form is to view the changes you made relative to
27 the index (staging area for the next commit). In other
28 words, the differences are what you _could_ tell git to
29 further add to the index but you still haven't. You can
5162e697 30 stage these changes by using linkgit:git-add[1].
2b9232cc 31+
24757702
JN
32If exactly two paths are given and at least one points outside
33the current repository, 'git diff' will compare the two files /
34directories. This behavior can be forced by --no-index.
d516c2d1 35
b1889c36 36'git diff' [--options] --cached [<commit>] [--] [<path>...]::
f5e6b89b
JH
37
38 This form is to view the changes you staged for the next
ce054545 39 commit relative to the named <commit>. Typically you
f5e6b89b
JH
40 would want comparison with the latest commit, so if you
41 do not give <commit>, it defaults to HEAD.
a2b7a3b3
NTND
42 If HEAD does not exist (e.g. unborned branches) and
43 <commit> is not given, it shows all staged changes.
2baf1850 44 --staged is a synonym of --cached.
f5e6b89b 45
b1889c36 46'git diff' [--options] <commit> [--] [<path>...]::
f5e6b89b
JH
47
48 This form is to view the changes you have in your
49 working tree relative to the named <commit>. You can
50 use HEAD to compare it with the latest commit, or a
51 branch name to compare with the tip of a different
52 branch.
53
b1889c36 54'git diff' [--options] <commit> <commit> [--] [<path>...]::
f5e6b89b 55
2b9232cc
MH
56 This is to view the changes between two arbitrary
57 <commit>.
58
bd52900d
JH
59'git diff' [options] <blob> <blob>::
60
61 This form is to view the differences between the raw
62 contents of two blob objects.
63
b1889c36 64'git diff' [--options] <commit>..<commit> [--] [<path>...]::
2b9232cc
MH
65
66 This is synonymous to the previous form. If <commit> on
67 one side is omitted, it will have the same effect as
68 using HEAD instead.
69
b1889c36 70'git diff' [--options] <commit>\...<commit> [--] [<path>...]::
2b9232cc
MH
71
72 This form is to view the changes on the branch containing
73 and up to the second <commit>, starting at a common ancestor
b1889c36
JN
74 of both <commit>. "git diff A\...B" is equivalent to
75 "git diff $(git-merge-base A B) B". You can omit any one
2b9232cc 76 of <commit>, which has the same effect as using HEAD instead.
f5e6b89b
JH
77
78Just in case if you are doing something exotic, it should be
0c783f66 79noted that all of the <commit> in the above description, except
ed84e6d5 80in the last two forms that use ".." notations, can be any
bd52900d 81<tree>.
dfa2f22f 82
41a5564e 83For a more complete list of ways to spell <commit>, see
9d83e382 84"SPECIFYING REVISIONS" section in linkgit:gitrevisions[7].
2b9232cc
MH
85However, "diff" is about comparing two _endpoints_, not ranges,
86and the range notations ("<commit>..<commit>" and
0c783f66 87"<commit>\...<commit>") do not mean a range as defined in the
9d83e382 88"SPECIFYING RANGES" section in linkgit:gitrevisions[7].
7fc9d69f
JH
89
90OPTIONS
91-------
c1a95fa6 92:git-diff: 1
f5e6b89b 93include::diff-options.txt[]
35ef3a4c
JH
94
95<path>...::
f5e6b89b
JH
96 The <paths> parameters, when given, are used to limit
97 the diff to the named paths (you can give directory
98 names and get diff for all files under them).
7fc9d69f 99
f552e51e 100
9e6c7230 101include::diff-format.txt[]
7fc9d69f 102
803f498c
JH
103EXAMPLES
104--------
105
106Various ways to check your working tree::
107+
108------------
48aeecdc 109$ git diff <1>
f2dd1c9a 110$ git diff --cached <2>
48aeecdc
SE
111$ git diff HEAD <3>
112------------
113+
434e6ef8
SH
114<1> Changes in the working tree not yet staged for the next commit.
115<2> Changes between the index and your last commit; what you
803f498c 116would be committing if you run "git commit" without "-a" option.
434e6ef8 117<3> Changes in the working tree since your last commit; what you
803f498c 118would be committing if you run "git commit -a"
803f498c
JH
119
120Comparing with arbitrary commits::
121+
122------------
48aeecdc
SE
123$ git diff test <1>
124$ git diff HEAD -- ./test <2>
125$ git diff HEAD^ HEAD <3>
126------------
127+
434e6ef8 128<1> Instead of using the tip of the current branch, compare with the
803f498c 129tip of "test" branch.
434e6ef8 130<2> Instead of comparing with the tip of "test" branch, compare with
89438677 131the tip of the current branch, but limit the comparison to the
803f498c 132file "test".
434e6ef8 133<3> Compare the version before the last commit and the last commit.
803f498c 134
2b9232cc
MH
135Comparing branches::
136+
137------------
138$ git diff topic master <1>
139$ git diff topic..master <2>
140$ git diff topic...master <3>
141------------
142+
143<1> Changes between the tips of the topic and the master branches.
144<2> Same as above.
06ada152 145<3> Changes that occurred on the master branch since when the topic
2b9232cc 146branch was started off it.
803f498c
JH
147
148Limiting the diff output::
149+
150------------
48aeecdc 151$ git diff --diff-filter=MRC <1>
90ae710e 152$ git diff --name-status <2>
48aeecdc
SE
153$ git diff arch/i386 include/asm-i386 <3>
154------------
155+
434e6ef8 156<1> Show only modification, rename and copy, but not addition
803f498c 157nor deletion.
434e6ef8 158<2> Show only names and the nature of change, but not actual
90ae710e 159diff output.
434e6ef8 160<3> Limit diff output to named subtrees.
803f498c
JH
161
162Munging the diff output::
163+
164------------
48aeecdc
SE
165$ git diff --find-copies-harder -B -C <1>
166$ git diff -R <2>
167------------
168+
434e6ef8 169<1> Spend extra cycles to find renames, copies and complete
803f498c 170rewrites (very expensive).
434e6ef8 171<2> Output diff in reverse.
803f498c 172
3bdfd443
DA
173SEE ALSO
174--------
b77134b0
JN
175diff(1),
176linkgit:git-difftool[1],
177linkgit:git-log[1],
178linkgit:gitdiffcore[7],
179linkgit:git-format-patch[1],
180linkgit:git-apply[1]
803f498c 181
7fc9d69f
JH
182GIT
183---
9e1f0a85 184Part of the linkgit:git[1] suite