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