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