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