Autogenerated man pages for 026351a03507dc3a2e89e068c01234dc55914df2
[git.git] / man1 / git-diff-files.1
1 .\"Generated by db2man.xsl. Don't modify this, modify the source.
2 .de Sh \" Subsection
3 .br
4 .if t .Sp
5 .ne 5
6 .PP
7 \fB\\$1\fR
8 .PP
9 ..
10 .de Sp \" Vertical space (when we can't use .PP)
11 .if t .sp .5v
12 .if n .sp
13 ..
14 .de Ip \" List item
15 .br
16 .ie \\n(.$>=3 .ne \\$3
17 .el .ne 3
18 .IP "\\$1" \\$2
19 ..
20 .TH "GIT-DIFF-FILES" 1 "" "" ""
21 .SH NAME
22 git-diff-files \- Compares files in the working tree and the index
23 .SH "SYNOPSIS"
24
25
26 git\-diff\-files [\-q] [<common diff options>] [<path>...]
27
28 .SH "DESCRIPTION"
29
30
31 Compares the files in the working tree and the index\&. When paths are specified, compares only those named paths\&. Otherwise all entries in the index are compared\&. The output format is the same as "git\-diff\-index" and "git\-diff\-tree"\&.
32
33 .SH "OPTIONS"
34
35 .TP
36 \-p
37 Generate patch (see section on generating patches)
38
39 .TP
40 \-u
41 Synonym for "\-p"\&.
42
43 .TP
44 \-z
45 \\0 line termination on output
46
47 .TP
48 \-\-name\-only
49 Show only names of changed files\&.
50
51 .TP
52 \-\-name\-status
53 Show only names and status of changed files\&.
54
55 .TP
56 \-\-full\-index
57 Instead of the first handful characters, show full object name of pre\- and post\-image blob on the "index" line when generating a patch format output\&.
58
59 .TP
60 \-\-abbrev[=<n>]
61 Instead of showing the full 40\-byte hexadecimal object name in diff\-raw format output and diff\-tree header lines, show only handful hexdigits prefix\&. This is independent of \-\-full\-index option above, which controls the diff\-patch output format\&. Non default number of digits can be specified with \-\-abbrev=<n>\&.
62
63 .TP
64 \-B
65 Break complete rewrite changes into pairs of delete and create\&.
66
67 .TP
68 \-M
69 Detect renames\&.
70
71 .TP
72 \-C
73 Detect copies as well as renames\&.
74
75 .TP
76 \-\-find\-copies\-harder
77 For performance reasons, by default, \-C option finds copies only if the original file of the copy was modified in the same changeset\&. This flag makes the command inspect unmodified files as candidates for the source of copy\&. This is a very expensive operation for large projects, so use it with caution\&.
78
79 .TP
80 \-l<num>
81 \-M and \-C options require O(n^2) processing time where n is the number of potential rename/copy targets\&. This option prevents rename/copy detection from running if the number of rename/copy targets exceeds the specified number\&.
82
83 .TP
84 \-S<string>
85 Look for differences that contain the change in <string>\&.
86
87 .TP
88 \-\-pickaxe\-all
89 When \-S finds a change, show all the changes in that changeset, not just the files that contain the change in <string>\&.
90
91 .TP
92 \-O<orderfile>
93 Output the patch in the order specified in the <orderfile>, which has one shell glob pattern per line\&.
94
95 .TP
96 \-R
97 Swap two inputs; that is, show differences from index or on\-disk file to tree contents\&.
98
99
100 For more detailed explanation on these common options, see also diffcore documentation: \fIdiffcore.html\fR\&.
101
102 .TP
103 \-1 \-2 \-3 or \-\-base \-\-ours \-\-theirs, and \-0
104 Diff against the "base" version, "our branch" or "their branch" respectively\&. With these options, diffs for merged entries are not shown\&.
105
106 The default is to diff against our branch (\-2) and the cleanly resolved paths\&. The option \-0 can be given to omit diff output for unmerged entries and just show "Unmerged"\&.
107
108 .TP
109 \-q
110 Remain silent even on nonexisting files
111
112 .SH "OUTPUT FORMAT"
113
114
115 The output format from "git\-diff\-index", "git\-diff\-tree" and "git\-diff\-files" are very similar\&.
116
117
118 These commands all compare two sets of things; what is compared differs:
119
120 .TP
121 git\-diff\-index <tree\-ish>
122 compares the <tree\-ish> and the files on the filesystem\&.
123
124 .TP
125 git\-diff\-index \-\-cached <tree\-ish>
126 compares the <tree\-ish> and the index\&.
127
128 .TP
129 git\-diff\-tree [\-r] <tree\-ish\-1> <tree\-ish\-2> [<pattern>...]
130 compares the trees named by the two arguments\&.
131
132 .TP
133 git\-diff\-files [<pattern>...]
134 compares the index and the files on the filesystem\&.
135
136
137 An output line is formatted this way:
138
139 .IP
140 in\-place edit  :100644 100644 bcd1234\&.\&.\&. 0123456\&.\&.\&. M file0
141 copy\-edit      :100644 100644 abcd123\&.\&.\&. 1234567\&.\&.\&. C68 file1 file2
142 rename\-edit    :100644 100644 abcd123\&.\&.\&. 1234567\&.\&.\&. R86 file1 file3
143 create         :000000 100644 0000000\&.\&.\&. 1234567\&.\&.\&. A file4
144 delete         :100644 000000 1234567\&.\&.\&. 0000000\&.\&.\&. D file5
145 unmerged       :000000 000000 0000000\&.\&.\&. 0000000\&.\&.\&. U file6
146
147 That is, from the left to the right:
148
149 .TP 3
150 1.
151 a colon\&.
152 .TP
153 2.
154 mode for "src"; 000000 if creation or unmerged\&.
155 .TP
156 3.
157 a space\&.
158 .TP
159 4.
160 mode for "dst"; 000000 if deletion or unmerged\&.
161 .TP
162 5.
163 a space\&.
164 .TP
165 6.
166 sha1 for "src"; 0{40} if creation or unmerged\&.
167 .TP
168 7.
169 a space\&.
170 .TP
171 8.
172 sha1 for "dst"; 0{40} if creation, unmerged or "look at work tree"\&.
173 .TP
174 9.
175 a space\&.
176 .TP
177 10.
178 status, followed by optional "score" number\&.
179 .TP
180 11.
181 a tab or a NUL when \-z option is used\&.
182 .TP
183 12.
184 path for "src"
185 .TP
186 13.
187 a tab or a NUL when \-z option is used; only exists for C or R\&.
188 .TP
189 14.
190 path for "dst"; only exists for C or R\&.
191 .TP
192 15.
193 an LF or a NUL when \-z option is used, to terminate the record\&.
194 .LP
195
196
197 <sha1> is shown as all 0's if a file is new on the filesystem and it is out of sync with the index\&.
198
199
200 Example:
201
202 .IP
203 :100644 100644 5be4a4\&.\&.\&.\&.\&.\&. 000000\&.\&.\&.\&.\&.\&. M file\&.c
204
205 When \-z option is not used, TAB, LF, and backslash characters in pathnames are represented as \\t, \\n, and \\\\, respectively\&.
206
207 .SH "GENERATING PATCHES WITH -P"
208
209
210 When "git\-diff\-index", "git\-diff\-tree", or "git\-diff\-files" are run with a \-p option, they do not produce the output described above; instead they produce a patch file\&.
211
212
213 The patch generation can be customized at two levels\&.
214
215 .TP 3
216 1.
217 When the environment variable GIT_EXTERNAL_DIFF is not set, these commands internally invoke "diff" like this:
218
219
220 .nf
221 diff \-L a/<path> \-L b/<path> \-pu <old> <new>
222 .fi
223 For added files, /dev/null is used for <old>\&. For removed files, /dev/null is used for <new>
224
225 The "diff" formatting options can be customized via the environment variable GIT_DIFF_OPTS\&. For example, if you prefer context diff:
226
227 .nf
228 GIT_DIFF_OPTS=\-c git\-diff\-index \-p HEAD
229 .fi
230 .TP
231 2.
232 When the environment variable GIT_EXTERNAL_DIFF is set, the program named by it is called, instead of the diff invocation described above\&.
233
234 For a path that is added, removed, or modified, GIT_EXTERNAL_DIFF is called with 7 parameters:
235
236
237 .nf
238 path old\-file old\-hex old\-mode new\-file new\-hex new\-mode
239 .fi
240 where:
241
242 <old|new>\-file
243 are files GIT_EXTERNAL_DIFF can use to read the contents of <old|new>,
244 <old|new>\-hex
245 are the 40\-hexdigit SHA1 hashes,
246 <old|new>\-mode
247 are the octal representation of the file modes\&.
248 The file parameters can point at the user's working file (e\&.g\&. new\-file in "git\-diff\-files"), /dev/null (e\&.g\&. old\-file when a new file is added), or a temporary file (e\&.g\&. old\-file in the index)\&. GIT_EXTERNAL_DIFF should not worry about unlinking the temporary file \-\-\- it is removed when GIT_EXTERNAL_DIFF exits\&.
249 .LP
250
251
252 For a path that is unmerged, GIT_EXTERNAL_DIFF is called with 1 parameter, <path>\&.
253
254 .SH "GIT SPECIFIC EXTENSION TO DIFF FORMAT"
255
256
257 What \-p option produces is slightly different from the traditional diff format\&.
258
259 .TP 3
260 1.
261 It is preceded with a "git diff" header, that looks like this:
262
263
264 .nf
265 diff \-\-git a/file1 b/file2
266 .fi
267 The a/ and b/ filenames are the same unless rename/copy is involved\&. Especially, even for a creation or a deletion, /dev/null is _not_ used in place of a/ or b/ filenames\&.
268
269 When rename/copy is involved, file1 and file2 show the name of the source file of the rename/copy and the name of the file that rename/copy produces, respectively\&.
270 .TP
271 2.
272 It is followed by one or more extended header lines:
273
274 .nf
275 old mode <mode>
276 new mode <mode>
277 deleted file mode <mode>
278 new file mode <mode>
279 copy from <path>
280 copy to <path>
281 rename from <path>
282 rename to <path>
283 similarity index <number>
284 dissimilarity index <number>
285 index <hash>\&.\&.<hash> <mode>
286 .fi
287 .TP
288 3.
289 TAB, LF, and backslash characters in pathnames are represented as \\t, \\n, and \\\\, respectively\&.
290 .LP
291
292 .SH "AUTHOR"
293
294
295 Written by Linus Torvalds <torvalds@osdl\&.org>
296
297 .SH "DOCUMENTATION"
298
299
300 Documentation by David Greaves, Junio C Hamano and the git\-list <git@vger\&.kernel\&.org>\&.
301
302 .SH "GIT"
303
304
305 Part of the \fBgit\fR(7) suite
306