blob: a3ae8747a226fcf1700aadb7d2b75502855a769b [file] [log] [blame]
Junio C Hamano543f8d62009-07-29 08:35:211Raw output format
2-----------------
3
4The raw output format from "git-diff-index", "git-diff-tree",
Junio C Hamano7ae0ab22007-11-03 02:46:465"git-diff-files" and "git diff --raw" are very similar.
Junio C Hamano1a4e8412005-12-27 08:17:236
Junio C Hamanoa77a5132007-06-08 16:13:447These commands all compare two sets of things; what is
Junio C Hamano1a4e8412005-12-27 08:17:238compared differs:
9
10git-diff-index <tree-ish>::
11 compares the <tree-ish> and the files on the filesystem.
12
13git-diff-index --cached <tree-ish>::
14 compares the <tree-ish> and the index.
15
16git-diff-tree [-r] <tree-ish-1> <tree-ish-2> [<pattern>...]::
17 compares the trees named by the two arguments.
18
19git-diff-files [<pattern>...]::
20 compares the index and the files on the filesystem.
21
Junio C Hamano167b1382010-01-31 23:04:3122The "git-diff-tree" command begins its output by printing the hash of
Junio C Hamano543f8d62009-07-29 08:35:2123what is being compared. After that, all the commands print one output
24line per changed file.
Junio C Hamano1a4e8412005-12-27 08:17:2325
26An output line is formatted this way:
27
28------------------------------------------------
Junio C Hamanof2b280b2018-12-01 14:45:0129in-place edit :100644 100644 bcd1234 0123456 M file0
30copy-edit :100644 100644 abcd123 1234567 C68 file1 file2
31rename-edit :100644 100644 abcd123 1234567 R86 file1 file3
32create :000000 100644 0000000 1234567 A file4
33delete :100644 000000 1234567 0000000 D file5
34unmerged :000000 000000 0000000 0000000 U file6
Junio C Hamano1a4e8412005-12-27 08:17:2335------------------------------------------------
36
37That is, from the left to the right:
38
39. a colon.
40. mode for "src"; 000000 if creation or unmerged.
41. a space.
42. mode for "dst"; 000000 if deletion or unmerged.
43. a space.
44. sha1 for "src"; 0\{40\} if creation or unmerged.
45. a space.
Junio C Hamano7bc73592022-07-11 23:08:3446. sha1 for "dst"; 0\{40\} if deletion, unmerged or "work tree out of sync with the index".
Junio C Hamano1a4e8412005-12-27 08:17:2347. a space.
48. status, followed by optional "score" number.
Junio C Hamano92d80372016-07-13 22:00:0549. a tab or a NUL when `-z` option is used.
Junio C Hamano1a4e8412005-12-27 08:17:2350. path for "src"
Junio C Hamano92d80372016-07-13 22:00:0551. a tab or a NUL when `-z` option is used; only exists for C or R.
Junio C Hamano1a4e8412005-12-27 08:17:2352. path for "dst"; only exists for C or R.
Junio C Hamano92d80372016-07-13 22:00:0553. an LF or a NUL when `-z` option is used, to terminate the record.
Junio C Hamano1a4e8412005-12-27 08:17:2354
Junio C Hamanoaa17c7c2008-11-03 04:36:5855Possible status letters are:
56
57- A: addition of a file
58- C: copy of a file into a new one
59- D: deletion of a file
60- M: modification of the contents or mode of a file
61- R: renaming of a file
Junio C Hamano7b1585b2021-10-14 17:11:5862- T: change in the type of the file (regular file, symbolic link or submodule)
Junio C Hamanoaa17c7c2008-11-03 04:36:5863- U: file is unmerged (you must complete the merge before it can
Junio C Hamano2f5a9892019-12-25 21:12:5564 be committed)
Junio C Hamanoaa17c7c2008-11-03 04:36:5865- X: "unknown" change type (most probably a bug, please report it)
66
Junio C Hamano54bf1e22008-12-20 06:30:1167Status letters C and R are always followed by a score (denoting the
Junio C Hamanoaa17c7c2008-11-03 04:36:5868percentage of similarity between the source and target of the move or
Junio C Hamano6bb32e62015-02-17 22:11:2669copy). Status letter M may be followed by a score (denoting the
70percentage of dissimilarity) for file rewrites.
Junio C Hamanoaa17c7c2008-11-03 04:36:5871
Junio C Hamano7bc73592022-07-11 23:08:3472The sha1 for "dst" is shown as all 0's if a file on the filesystem
73is out of sync with the index.
Junio C Hamano1a4e8412005-12-27 08:17:2374
75Example:
76
77------------------------------------------------
Junio C Hamanof2b280b2018-12-01 14:45:0178:100644 100644 5be4a4a 0000000 M file.c
Junio C Hamano1a4e8412005-12-27 08:17:2379------------------------------------------------
80
Junio C Hamano0f6f3bf2017-03-13 07:01:5381Without the `-z` option, pathnames with "unusual" characters are
82quoted as explained for the configuration variable `core.quotePath`
83(see linkgit:git-config[1]). Using `-z` the filename is output
84verbatim and the line is terminated by a NUL byte.
Junio C Hamano1a4e8412005-12-27 08:17:2385
Junio C Hamano67fad6d2007-05-06 08:53:1286diff format for merges
87----------------------
88
Junio C Hamano7ae0ab22007-11-03 02:46:4689"git-diff-tree", "git-diff-files" and "git-diff --raw"
Junio C Hamano92d80372016-07-13 22:00:0590can take `-c` or `--cc` option
Junio C Hamano67fad6d2007-05-06 08:53:1291to generate diff output also for merge commits. The output differs
92from the format described above in the following way:
93
94. there is a colon for each parent
95. there are more "src" modes and "src" sha1
96. status is concatenated status characters for each parent
97. no optional "score" number
Junio C Hamano11f15372019-03-07 03:17:0098. tab-separated pathname(s) of the file
Junio C Hamano67fad6d2007-05-06 08:53:1299
Junio C Hamano11f15372019-03-07 03:17:00100For `-c` and `--cc`, only the destination or final path is shown even
101if the file was renamed on any side of history. With
102`--combined-all-paths`, the name of the path in each parent is shown
103followed by the name of the path in the merge commit.
104
105Examples for `-c` and `--cc` without `--combined-all-paths`:
106------------------------------------------------
107::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c
108::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM bar.sh
109::100644 100644 100644 e07d6c5 9042e82 ee91881 RR phooey.c
110------------------------------------------------
111
112Examples when `--combined-all-paths` added to either `-c` or `--cc`:
Junio C Hamano67fad6d2007-05-06 08:53:12113
114------------------------------------------------
Junio C Hamano11f15372019-03-07 03:17:00115::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c desc.c desc.c
116::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM foo.sh bar.sh bar.sh
117::100644 100644 100644 e07d6c5 9042e82 ee91881 RR fooey.c fuey.c phooey.c
Junio C Hamano67fad6d2007-05-06 08:53:12118------------------------------------------------
119
120Note that 'combined diff' lists only files which were modified from
121all parents.
122
Junio C Hamano1a4e8412005-12-27 08:17:23123
Junio C Hamano00b8b632007-12-07 09:50:49124include::diff-generate-patch.txt[]
Junio C Hamano3a702342007-12-12 21:34:02125
126
127other diff formats
128------------------
129
130The `--summary` option describes newly added, deleted, renamed and
131copied files. The `--stat` option adds diffstat(1) graph to the
132output. These options can be combined with other options, such as
133`-p`, and are meant for human consumption.
134
135When showing a change that involves a rename or a copy, `--stat` output
136formats the pathnames compactly by combining common prefix and suffix of
137the pathnames. For example, a change that moves `arch/i386/Makefile` to
138`arch/x86/Makefile` while modifying 4 lines will be shown like this:
139
140------------------------------------
141arch/{i386 => x86}/Makefile | 4 +--
142------------------------------------
143
144The `--numstat` option gives the diffstat(1) information but is designed
145for easier machine consumption. An entry in `--numstat` output looks
146like this:
147
148----------------------------------------
1491 2 README
1503 1 arch/{i386 => x86}/Makefile
151----------------------------------------
152
153That is, from left to right:
154
155. the number of added lines;
156. a tab;
157. the number of deleted lines;
158. a tab;
159. pathname (possibly with rename/copy information);
160. a newline.
161
162When `-z` output option is in effect, the output is formatted this way:
163
164----------------------------------------
1651 2 README NUL
1663 1 NUL arch/i386/Makefile NUL arch/x86/Makefile NUL
167----------------------------------------
168
169That is:
170
171. the number of added lines;
172. a tab;
173. the number of deleted lines;
174. a tab;
175. a NUL (only exists if renamed/copied);
176. pathname in preimage;
177. a NUL (only exists if renamed/copied);
178. pathname in postimage (only exists if renamed/copied);
179. a NUL.
180
181The extra `NUL` before the preimage path in renamed case is to allow
182scripts that read the output to tell if the current record being read is
183a single-path record or a rename/copy record without reading ahead.
184After reading added and deleted lines, reading up to `NUL` would yield
185the pathname, but if that is `NUL`, the record will show two paths.