Git fork
1git-diff(1)
2===========
3
4NAME
5----
6git-diff - Show changes between commits, commit and working tree, etc
7
8
9SYNOPSIS
10--------
11[synopsis]
12git diff [<options>] [<commit>] [--] [<path>...]
13git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>...]
14git diff [<options>] [--merge-base] <commit> [<commit>...] <commit> [--] [<path>...]
15git diff [<options>] <commit>...<commit> [--] [<path>...]
16git diff [<options>] <blob> <blob>
17git diff [<options>] --no-index [--] <path> <path> [<pathspec>...]
18
19DESCRIPTION
20-----------
21Show changes between the working tree and the index or a tree, changes
22between the index and a tree, changes between two trees, changes resulting
23from a merge, changes between two blob objects, or changes between two
24files on disk.
25
26`git diff [<options>] [--] [<path>...]`::
27
28 This form is to view the changes you made relative to
29 the index (staging area for the next commit). In other
30 words, the differences are what you _could_ tell Git to
31 further add to the index but you still haven't. You can
32 stage these changes by using linkgit:git-add[1].
33
34`git diff [<options>] --no-index [--] <path> <path> [<pathspec>...]`::
35
36 This form is to compare the given two paths on the
37 filesystem. You can omit the `--no-index` option when
38 running the command in a working tree controlled by Git and
39 at least one of the paths points outside the working tree,
40 or when running the command outside a working tree
41 controlled by Git. This form implies `--exit-code`. If both
42 paths point to directories, additional pathspecs may be
43 provided. These will limit the files included in the
44 difference. All such pathspecs must be relative as they
45 apply to both sides of the diff.
46
47`git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>...]`::
48
49 This form is to view the changes you staged for the next
50 commit relative to the named _<commit>_. Typically you
51 would want comparison with the latest commit, so if you
52 do not give _<commit>_, it defaults to `HEAD`.
53 If `HEAD` does not exist (e.g. unborn branches) and
54 _<commit>_ is not given, it shows all staged changes.
55 `--staged` is a synonym of `--cached`.
56+
57If `--merge-base` is given, instead of using _<commit>_, use the merge base
58of _<commit>_ and `HEAD`. `git diff --cached --merge-base A` is equivalent to
59`git diff --cached $(git merge-base A HEAD)`.
60
61`git diff [<options>] [--merge-base] <commit> [--] [<path>...]`::
62
63 This form is to view the changes you have in your
64 working tree relative to the named _<commit>_. You can
65 use `HEAD` to compare it with the latest commit, or a
66 branch name to compare with the tip of a different
67 branch.
68+
69If `--merge-base` is given, instead of using _<commit>_, use the merge base
70of _<commit>_ and `HEAD`. `git diff --merge-base A` is equivalent to
71`git diff $(git merge-base A HEAD)`.
72
73`git diff [<options>] [--merge-base] <commit> <commit> [--] [<path>...]`::
74
75 This is to view the changes between two arbitrary
76 _<commit>_.
77+
78If `--merge-base` is given, use the merge base of the two commits for the
79"before" side. `git diff --merge-base A B` is equivalent to
80`git diff $(git merge-base A B) B`.
81
82`git diff [<options>] <commit> <commit>...<commit> [--] [<path>...]`::
83
84 This form is to view the results of a merge commit. The first
85 listed _<commit>_ must be the merge itself; the remaining two or
86 more commits should be its parents. Convenient ways to produce
87 the desired set of revisions are to use the suffixes `@` and
88 `^!`. If `A` is a merge commit, then `git diff A A^@`,
89 `git diff A^!` and `git show A` all give the same combined diff.
90
91`git diff [<options>] <commit>..<commit> [--] [<path>...]`::
92
93 This is synonymous to the earlier form (without the `..`) for
94 viewing the changes between two arbitrary _<commit>_. If _<commit>_ on
95 one side is omitted, it will have the same effect as
96 using `HEAD` instead.
97
98`git diff [<options>] <commit>...<commit> [--] [<path>...]`::
99
100 This form is to view the changes on the branch containing
101 and up to the second _<commit>_, starting at a common ancestor
102 of both _<commit>_. `git diff A...B` is equivalent to
103 `git diff $(git merge-base A B) B`. You can omit any one
104 of _<commit>_, which has the same effect as using `HEAD` instead.
105
106Just in case you are doing something exotic, it should be
107noted that all of the _<commit>_ in the above description, except
108in the `--merge-base` case and in the last two forms that use `..`
109notations, can be any _<tree>_. A tree of interest is the one pointed to
110by the ref named `AUTO_MERGE`, which is written by the `ort` merge
111strategy upon hitting merge conflicts (see linkgit:git-merge[1]).
112Comparing the working tree with `AUTO_MERGE` shows changes you've made
113so far to resolve textual conflicts (see the examples below).
114
115For a more complete list of ways to spell _<commit>_, see
116"SPECIFYING REVISIONS" section in linkgit:gitrevisions[7].
117However, `diff` is about comparing two _endpoints_, not ranges,
118and the range notations (`<commit>..<commit>` and `<commit>...<commit>`)
119do not mean a range as defined in the
120"SPECIFYING RANGES" section in linkgit:gitrevisions[7].
121
122`git diff [<options>] <blob> <blob>`::
123
124 This form is to view the differences between the raw
125 contents of two blob objects.
126
127OPTIONS
128-------
129:git-diff: 1
130include::diff-options.adoc[]
131
132`-1`::
133`--base`::
134`-2`::
135`--ours`::
136`-3`::
137`--theirs`::
138 Compare the working tree with
139+
140--
141 * the "base" version (stage #1) when using `-1` or `--base`,
142 * "our branch" (stage #2) when using `-2` or `--ours`, or
143 * "their branch" (stage #3) when using `-3` or `--theirs`.
144--
145+
146The index contains these stages only for unmerged entries i.e.
147while resolving conflicts. See linkgit:git-read-tree[1]
148section "3-Way Merge" for detailed information.
149
150`-0`::
151 Omit diff output for unmerged entries and just show
152 "Unmerged". Can be used only when comparing the working tree
153 with the index.
154
155`<path>...`::
156 The _<path>_ parameters, when given, are used to limit
157 the diff to the named paths (you can give directory
158 names and get diff for all files under them).
159
160
161include::diff-format.adoc[]
162
163EXAMPLES
164--------
165
166Various ways to check your working tree::
167+
168------------
169$ git diff <1>
170$ git diff --cached <2>
171$ git diff HEAD <3>
172$ git diff AUTO_MERGE <4>
173------------
174+
175<1> Changes in the working tree not yet staged for the next commit.
176<2> Changes between the index and your last commit; what you
177 would be committing if you run `git commit` without `-a` option.
178<3> Changes in the working tree since your last commit; what you
179 would be committing if you run `git commit -a`
180<4> Changes in the working tree you've made to resolve textual
181 conflicts so far.
182
183Comparing with arbitrary commits::
184+
185------------
186$ git diff test <1>
187$ git diff HEAD -- ./test <2>
188$ git diff HEAD^ HEAD <3>
189------------
190+
191<1> Instead of using the tip of the current branch, compare with the
192 tip of "test" branch.
193<2> Instead of comparing with the tip of "test" branch, compare with
194 the tip of the current branch, but limit the comparison to the
195 file "test".
196<3> Compare the version before the last commit and the last commit.
197
198Comparing branches::
199+
200------------
201$ git diff topic master <1>
202$ git diff topic..master <2>
203$ git diff topic...master <3>
204------------
205+
206<1> Changes between the tips of the topic and the master branches.
207<2> Same as above.
208<3> Changes that occurred on the master branch since when the topic
209 branch was started off it.
210
211Limiting the diff output::
212+
213------------
214$ git diff --diff-filter=MRC <1>
215$ git diff --name-status <2>
216$ git diff arch/i386 include/asm-i386 <3>
217------------
218+
219<1> Show only modification, rename, and copy, but not addition
220 or deletion.
221<2> Show only names and the nature of change, but not actual
222 diff output.
223<3> Limit diff output to named subtrees.
224
225Munging the diff output::
226+
227------------
228$ git diff --find-copies-harder -B -C <1>
229$ git diff -R <2>
230------------
231+
232<1> Spend extra cycles to find renames, copies and complete
233 rewrites (very expensive).
234<2> Output diff in reverse.
235
236CONFIGURATION
237-------------
238
239include::includes/cmd-config-section-all.adoc[]
240
241:git-diff: 1
242include::config/diff.adoc[]
243
244SEE ALSO
245--------
246`diff`(1),
247linkgit:git-difftool[1],
248linkgit:git-log[1],
249linkgit:gitdiffcore[7],
250linkgit:git-format-patch[1],
251linkgit:git-apply[1],
252linkgit:git-show[1]
253
254GIT
255---
256Part of the linkgit:git[1] suite