]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-diff.txt
t4034: abstract away SHA-1-specific constants
[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 11[verse]
de613050
RD
12'git diff' [<options>] [<commit>] [--] [<path>...]
13'git diff' [<options>] --cached [<commit>] [--] [<path>...]
14'git diff' [<options>] <commit> <commit> [--] [<path>...]
15'git diff' [<options>] <blob> <blob>
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
de613050 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].
286bc123 31
de613050 32'git diff' [<options>] --no-index [--] <path> <path>::
286bc123
JH
33
34 This form is to compare the given two paths on the
35 filesystem. You can omit the `--no-index` option when
36 running the command in a working tree controlled by Git and
37 at least one of the paths points outside the working tree,
38 or when running the command outside a working tree
39 controlled by Git.
d516c2d1 40
de613050 41'git diff' [<options>] --cached [<commit>] [--] [<path>...]::
f5e6b89b
JH
42
43 This form is to view the changes you staged for the next
ce054545 44 commit relative to the named <commit>. Typically you
f5e6b89b
JH
45 would want comparison with the latest commit, so if you
46 do not give <commit>, it defaults to HEAD.
5fe8f49b 47 If HEAD does not exist (e.g. unborn branches) and
a2b7a3b3 48 <commit> is not given, it shows all staged changes.
2baf1850 49 --staged is a synonym of --cached.
f5e6b89b 50
de613050 51'git diff' [<options>] <commit> [--] [<path>...]::
f5e6b89b
JH
52
53 This form is to view the changes you have in your
54 working tree relative to the named <commit>. You can
55 use HEAD to compare it with the latest commit, or a
56 branch name to compare with the tip of a different
57 branch.
58
de613050 59'git diff' [<options>] <commit> <commit> [--] [<path>...]::
f5e6b89b 60
2b9232cc
MH
61 This is to view the changes between two arbitrary
62 <commit>.
63
de613050 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
de613050 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 74 of both <commit>. "git diff A\...B" is equivalent to
ca8ed443 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 77
ca8ed443 78Just in case 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 89
de613050 90'git diff' [<options>] <blob> <blob>::
d7747bd5
KB
91
92 This form is to view the differences between the raw
93 contents of two blob objects.
94
7fc9d69f
JH
95OPTIONS
96-------
c1a95fa6 97:git-diff: 1
f5e6b89b 98include::diff-options.txt[]
35ef3a4c 99
47242cd1
AH
100-1 --base::
101-2 --ours::
102-3 --theirs::
103 Compare the working tree with the "base" version (stage #1),
104 "our branch" (stage #2) or "their branch" (stage #3). The
105 index contains these stages only for unmerged entries i.e.
106 while resolving conflicts. See linkgit:git-read-tree[1]
107 section "3-Way Merge" for detailed information.
108
109-0::
110 Omit diff output for unmerged entries and just show
111 "Unmerged". Can be used only when comparing the working tree
112 with the index.
113
35ef3a4c 114<path>...::
f5e6b89b
JH
115 The <paths> parameters, when given, are used to limit
116 the diff to the named paths (you can give directory
117 names and get diff for all files under them).
7fc9d69f 118
f552e51e 119
9e6c7230 120include::diff-format.txt[]
7fc9d69f 121
803f498c
JH
122EXAMPLES
123--------
124
125Various ways to check your working tree::
126+
127------------
48aeecdc 128$ git diff <1>
f2dd1c9a 129$ git diff --cached <2>
48aeecdc
SE
130$ git diff HEAD <3>
131------------
132+
434e6ef8
SH
133<1> Changes in the working tree not yet staged for the next commit.
134<2> Changes between the index and your last commit; what you
ba170517 135 would be committing if you run "git commit" without "-a" option.
434e6ef8 136<3> Changes in the working tree since your last commit; what you
ba170517 137 would be committing if you run "git commit -a"
803f498c
JH
138
139Comparing with arbitrary commits::
140+
141------------
48aeecdc
SE
142$ git diff test <1>
143$ git diff HEAD -- ./test <2>
144$ git diff HEAD^ HEAD <3>
145------------
146+
434e6ef8 147<1> Instead of using the tip of the current branch, compare with the
ba170517 148 tip of "test" branch.
434e6ef8 149<2> Instead of comparing with the tip of "test" branch, compare with
ba170517
JNA
150 the tip of the current branch, but limit the comparison to the
151 file "test".
434e6ef8 152<3> Compare the version before the last commit and the last commit.
803f498c 153
2b9232cc
MH
154Comparing branches::
155+
156------------
157$ git diff topic master <1>
158$ git diff topic..master <2>
159$ git diff topic...master <3>
160------------
161+
162<1> Changes between the tips of the topic and the master branches.
163<2> Same as above.
06ada152 164<3> Changes that occurred on the master branch since when the topic
ba170517 165 branch was started off it.
803f498c
JH
166
167Limiting the diff output::
168+
169------------
48aeecdc 170$ git diff --diff-filter=MRC <1>
90ae710e 171$ git diff --name-status <2>
48aeecdc
SE
172$ git diff arch/i386 include/asm-i386 <3>
173------------
174+
a58088ab 175<1> Show only modification, rename, and copy, but not addition
ba170517 176 or deletion.
434e6ef8 177<2> Show only names and the nature of change, but not actual
ba170517 178 diff output.
434e6ef8 179<3> Limit diff output to named subtrees.
803f498c
JH
180
181Munging the diff output::
182+
183------------
48aeecdc
SE
184$ git diff --find-copies-harder -B -C <1>
185$ git diff -R <2>
186------------
187+
434e6ef8 188<1> Spend extra cycles to find renames, copies and complete
ba170517 189 rewrites (very expensive).
434e6ef8 190<2> Output diff in reverse.
803f498c 191
3bdfd443
DA
192SEE ALSO
193--------
b77134b0
JN
194diff(1),
195linkgit:git-difftool[1],
196linkgit:git-log[1],
197linkgit:gitdiffcore[7],
198linkgit:git-format-patch[1],
199linkgit:git-apply[1]
803f498c 200
7fc9d69f
JH
201GIT
202---
9e1f0a85 203Part of the linkgit:git[1] suite