1 .\"Generated by db2man.xsl. Don't modify this, modify the source.
10 .de Sp \" Vertical space (when we can't use .PP)
16 .ie \\n(.$>=3 .ne \\$3
20 .TH "GIT-DIFF-FILES" 1 "" "" ""
22 git-diff-files \- Compares files in the working tree and the index
26 git\-diff\-files [\-q] [\-0|\-1|\-2|\-3|\-c|\-\-cc] [<common diff options>] [<path>...]
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"\&.
37 Generate patch (see section on generating patches)
45 \\0 line termination on output
49 Show only names of changed files\&.
53 Show only names and status of changed files\&.
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\&.
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>\&.
65 Break complete rewrite changes into pairs of delete and create\&.
73 Detect copies as well as renames\&.
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\&.
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\&.
85 Look for differences that contain the change in <string>\&.
89 When \-S finds a change, show all the changes in that changeset, not just the files that contain the change in <string>\&.
93 Output the patch in the order specified in the <orderfile>, which has one shell glob pattern per line\&.
97 Swap two inputs; that is, show differences from index or on\-disk file to tree contents\&.
100 For more detailed explanation on these common options, see also diffcore documentation: \fIdiffcore.html\fR\&.
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\&.
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"\&.
110 This compares stage 2 (our branch), stage 3 (their branch) and the working tree file and outputs a combined diff, similar to the way diff\-tree shows a merge commit with these flags\&.
114 Remain silent even on nonexisting files
119 The output format from "git\-diff\-index", "git\-diff\-tree" and "git\-diff\-files" are very similar\&.
122 These commands all compare two sets of things; what is compared differs:
125 git\-diff\-index <tree\-ish>
126 compares the <tree\-ish> and the files on the filesystem\&.
129 git\-diff\-index \-\-cached <tree\-ish>
130 compares the <tree\-ish> and the index\&.
133 git\-diff\-tree [\-r] <tree\-ish\-1> <tree\-ish\-2> [<pattern>...]
134 compares the trees named by the two arguments\&.
137 git\-diff\-files [<pattern>...]
138 compares the index and the files on the filesystem\&.
141 An output line is formatted this way:
144 in\-place edit :100644 100644 bcd1234\&.\&.\&. 0123456\&.\&.\&. M file0
145 copy\-edit :100644 100644 abcd123\&.\&.\&. 1234567\&.\&.\&. C68 file1 file2
146 rename\-edit :100644 100644 abcd123\&.\&.\&. 1234567\&.\&.\&. R86 file1 file3
147 create :000000 100644 0000000\&.\&.\&. 1234567\&.\&.\&. A file4
148 delete :100644 000000 1234567\&.\&.\&. 0000000\&.\&.\&. D file5
149 unmerged :000000 000000 0000000\&.\&.\&. 0000000\&.\&.\&. U file6
151 That is, from the left to the right:
158 mode for "src"; 000000 if creation or unmerged\&.
164 mode for "dst"; 000000 if deletion or unmerged\&.
170 sha1 for "src"; 0{40} if creation or unmerged\&.
176 sha1 for "dst"; 0{40} if creation, unmerged or "look at work tree"\&.
182 status, followed by optional "score" number\&.
185 a tab or a NUL when \-z option is used\&.
191 a tab or a NUL when \-z option is used; only exists for C or R\&.
194 path for "dst"; only exists for C or R\&.
197 an LF or a NUL when \-z option is used, to terminate the record\&.
201 <sha1> is shown as all 0's if a file is new on the filesystem and it is out of sync with the index\&.
207 :100644 100644 5be4a4\&.\&.\&.\&.\&.\&. 000000\&.\&.\&.\&.\&.\&. M file\&.c
209 When \-z option is not used, TAB, LF, and backslash characters in pathnames are represented as \\t, \\n, and \\\\, respectively\&.
211 .SH "GENERATING PATCHES WITH -P"
214 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\&.
217 The patch generation can be customized at two levels\&.
221 When the environment variable GIT_EXTERNAL_DIFF is not set, these commands internally invoke "diff" like this:
225 diff \-L a/<path> \-L b/<path> \-pu <old> <new>
227 For added files, /dev/null is used for <old>\&. For removed files, /dev/null is used for <new>
229 The "diff" formatting options can be customized via the environment variable GIT_DIFF_OPTS\&. For example, if you prefer context diff:
232 GIT_DIFF_OPTS=\-c git\-diff\-index \-p HEAD
236 When the environment variable GIT_EXTERNAL_DIFF is set, the program named by it is called, instead of the diff invocation described above\&.
238 For a path that is added, removed, or modified, GIT_EXTERNAL_DIFF is called with 7 parameters:
242 path old\-file old\-hex old\-mode new\-file new\-hex new\-mode
247 are files GIT_EXTERNAL_DIFF can use to read the contents of <old|new>,
249 are the 40\-hexdigit SHA1 hashes,
251 are the octal representation of the file modes\&.
252 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\&.
256 For a path that is unmerged, GIT_EXTERNAL_DIFF is called with 1 parameter, <path>\&.
258 .SH "GIT SPECIFIC EXTENSION TO DIFF FORMAT"
261 What \-p option produces is slightly different from the traditional diff format\&.
265 It is preceded with a "git diff" header, that looks like this:
269 diff \-\-git a/file1 b/file2
271 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\&.
273 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\&.
276 It is followed by one or more extended header lines:
281 deleted file mode <mode>
287 similarity index <number>
288 dissimilarity index <number>
289 index <hash>\&.\&.<hash> <mode>
293 TAB, LF, and backslash characters in pathnames are represented as \\t, \\n, and \\\\, respectively\&.
296 .SH "COMBINED DIFF FORMAT"
299 git\-diff\-tree and git\-diff\-files can take \-c or \-\-cc option to produce combined diff, which looks like this:
302 diff \-\-combined describe\&.c
304 return (a_date > b_date) ? \-1 : (a_date == b_date) ? 0 : 1;
307 \- static void describe(char *arg)
308 \-static void describe(struct commit *cmit, int last_one)
309 ++static void describe(char *arg, int last_one)
311 + unsigned char sha1[20];
312 + struct commit *cmit;
314 Unlike the traditional unified diff format, which shows two files A and B with a single column that has \- (minus -- appears in A but removed in B), + (plus -- missing in A but added to B), or (space -- unchanged) prefix, this format compares two or more files file1, file2,... with one file X, and shows how X differs from each of fileN\&. One column for each of fileN is prepended to the output line to note how X's line is different from it\&.
317 A \- character in the column N means that the line appears in fileN but it does not appear in the last file\&. A + character in the column N means that the line appears in the last file, and fileN does not have that line\&.
320 In the above example output, the function signature was changed from both files (hence two \- removals from both file1 and file2, plus ++ to mean one line that was added does not appear in either file1 nor file2)\&. Also two other lines are the same from file1 but do not appear in file2 (hence prefixed with +)\&.
323 When shown by git diff\-tree \-c, it compares the parents of a merge commit with the merge result (i\&.e\&. file1\&.\&.fileN are the parents)\&. When shown by git diff\-files \-c, it compares the two unresolved merge parents with the working tree file (i\&.e\&. file1 is stage 2 aka "our version", file2 is stage 3 aka "their version")\&.
328 Written by Linus Torvalds <torvalds@osdl\&.org>
333 Documentation by David Greaves, Junio C Hamano and the git\-list <git@vger\&.kernel\&.org>\&.
338 Part of the \fBgit\fR(7) suite