]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/pretty-formats.txt
Merge branch 'hi/gpg-mintrustlevel'
[thirdparty/git.git] / Documentation / pretty-formats.txt
CommitLineData
331b51d2
JN
1PRETTY FORMATS
2--------------
3
4If the commit is a merge, and if the pretty-format
5is not 'oneline', 'email' or 'raw', an additional line is
6inserted before the 'Author:' line. This line begins with
bae74c9d 7"Merge: " and the hashes of ancestral commits are printed,
331b51d2
JN
8separated by spaces. Note that the listed commits may not
9necessarily be the list of the *direct* parent commits if you
10have limited your view of history: for example, if you are
11only interested in changes related to a certain directory or
12file.
13
8028184e
WP
14There are several built-in formats, and you can define
15additional formats by setting a pretty.<name>
16config option to either another format name, or a
17'format:' string, as described below (see
18linkgit:git-config[1]). Here are the details of the
19built-in formats:
331b51d2
JN
20
21* 'oneline'
5d1faf87 22
bae74c9d 23 <hash> <title line>
5d1faf87
CR
24+
25This is designed to be as compact as possible.
26
331b51d2 27* 'short'
5d1faf87 28
bae74c9d 29 commit <hash>
5d1faf87
CR
30 Author: <author>
31
32 <title line>
33
331b51d2 34* 'medium'
5d1faf87 35
bae74c9d 36 commit <hash>
5d1faf87 37 Author: <author>
ec9f0ea3 38 Date: <author date>
5d1faf87
CR
39
40 <title line>
41
42 <full commit message>
43
331b51d2 44* 'full'
5d1faf87 45
bae74c9d 46 commit <hash>
5d1faf87
CR
47 Author: <author>
48 Commit: <committer>
49
50 <title line>
51
52 <full commit message>
53
331b51d2 54* 'fuller'
5d1faf87 55
bae74c9d 56 commit <hash>
ec9f0ea3 57 Author: <author>
2b2da684 58 AuthorDate: <author date>
ec9f0ea3 59 Commit: <committer>
2b2da684 60 CommitDate: <committer date>
5d1faf87
CR
61
62 <title line>
63
64 <full commit message>
65
1f0fc1db
DL
66* 'reference'
67
68 <abbrev hash> (<title line>, <short author date>)
69+
70This format is used to refer to another commit in a commit message and
71is the same as `--pretty='format:%C(auto)%h (%s, %ad)'`. By default,
72the date is formatted with `--date=short` unless another `--date` option
73is explicitly specified. As with any `format:` with format
74placeholders, its output is not affected by other options like
75`--decorate` and `--walk-reflogs`.
76
331b51d2 77* 'email'
5d1faf87 78
bae74c9d 79 From <hash> <date>
5d1faf87 80 From: <author>
2b2da684 81 Date: <author date>
5d1faf87
CR
82 Subject: [PATCH] <title line>
83
331b51d2 84 <full commit message>
5d1faf87 85
331b51d2 86* 'raw'
5d1faf87
CR
87+
88The 'raw' format shows the entire commit exactly as
bae74c9d 89stored in the commit object. Notably, the hashes are
5d1faf87
CR
90displayed in full, regardless of whether --abbrev or
91--no-abbrev are used, and 'parents' information show the
a58088ab 92true parent commits, without taking grafts or history
92de9217
MM
93simplification into account. Note that this format affects the way
94commits are displayed, but not the way the diff is shown e.g. with
95`git log --raw`. To get full object names in a raw diff format,
96use `--no-abbrev`.
7cbcf4d5 97
41e4d69f 98* 'format:<string>'
e52a5de4 99+
41e4d69f 100The 'format:<string>' format allows you to specify which information
e52a5de4
JS
101you want to show. It works a little bit like printf format,
102with the notable exception that you get a newline with '%n'
103instead of '\n'.
331b51d2
JN
104+
105E.g, 'format:"The author of %h was %an, %ar%nThe title was >>%s<<%n"'
e52a5de4 106would show something like this:
331b51d2
JN
107+
108-------
e52a5de4
JS
109The author of fe6e0ee was Junio C Hamano, 23 hours ago
110The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<
111
c30c43c0 112-------
331b51d2 113+
e52a5de4
JS
114The placeholders are:
115
42617752
AW
116- Placeholders that expand to a single literal character:
117'%n':: newline
118'%%':: a raw '%'
119'%x00':: print a byte from a hex code
120
121- Placeholders that affect formatting of later placeholders:
122'%Cred':: switch color to red
123'%Cgreen':: switch color to green
124'%Cblue':: switch color to blue
125'%Creset':: reset color
126'%C(...)':: color specification, as described under Values in the
127 "CONFIGURATION FILE" section of linkgit:git-config[1]. By
128 default, colors are shown only when enabled for log output
129 (by `color.diff`, `color.ui`, or `--color`, and respecting
130 the `auto` settings of the former if we are going to a
131 terminal). `%C(auto,...)` is accepted as a historical
132 synonym for the default (e.g., `%C(auto,red)`). Specifying
42977bf5 133 `%C(always,...)` will show the colors even when color is
42617752
AW
134 not otherwise enabled (though consider just using
135 `--color=always` to enable color for the whole output,
136 including this format and anything else git might color).
137 `auto` alone (i.e. `%C(auto)`) will turn on auto coloring
138 on the next placeholders until the color is switched
139 again.
140'%m':: left (`<`), right (`>`) or boundary (`-`) mark
141'%w([<w>[,<i1>[,<i2>]]])':: switch line wrapping, like the -w option of
142 linkgit:git-shortlog[1].
143'%<(<N>[,trunc|ltrunc|mtrunc])':: make the next placeholder take at
144 least N columns, padding spaces on
145 the right if necessary. Optionally
146 truncate at the beginning (ltrunc),
147 the middle (mtrunc) or the end
148 (trunc) if the output is longer than
149 N columns. Note that truncating
150 only works correctly with N >= 2.
151'%<|(<N>)':: make the next placeholder take at least until Nth
152 columns, padding spaces on the right if necessary
153'%>(<N>)', '%>|(<N>)':: similar to '%<(<N>)', '%<|(<N>)' respectively,
154 but padding spaces on the left
155'%>>(<N>)', '%>>|(<N>)':: similar to '%>(<N>)', '%>|(<N>)'
156 respectively, except that if the next
157 placeholder takes more spaces than given and
158 there are spaces on its left, use those
159 spaces
160'%><(<N>)', '%><|(<N>)':: similar to '%<(<N>)', '%<|(<N>)'
161 respectively, but padding both sides
162 (i.e. the text is centered)
163
164- Placeholders that expand to information extracted from the commit:
165'%H':: commit hash
166'%h':: abbreviated commit hash
167'%T':: tree hash
168'%t':: abbreviated tree hash
169'%P':: parent hashes
170'%p':: abbreviated parent hashes
171'%an':: author name
172'%aN':: author name (respecting .mailmap, see linkgit:git-shortlog[1]
173 or linkgit:git-blame[1])
174'%ae':: author email
175'%aE':: author email (respecting .mailmap, see linkgit:git-shortlog[1]
176 or linkgit:git-blame[1])
d8b8217c
PB
177'%al':: author email local-part (the part before the '@' sign)
178'%aL':: author local-part (see '%al') respecting .mailmap, see
179 linkgit:git-shortlog[1] or linkgit:git-blame[1])
42617752
AW
180'%ad':: author date (format respects --date= option)
181'%aD':: author date, RFC2822 style
182'%ar':: author date, relative
183'%at':: author date, UNIX timestamp
184'%ai':: author date, ISO 8601-like format
185'%aI':: author date, strict ISO 8601 format
0df62117 186'%as':: author date, short format (`YYYY-MM-DD`)
42617752
AW
187'%cn':: committer name
188'%cN':: committer name (respecting .mailmap, see
189 linkgit:git-shortlog[1] or linkgit:git-blame[1])
190'%ce':: committer email
191'%cE':: committer email (respecting .mailmap, see
192 linkgit:git-shortlog[1] or linkgit:git-blame[1])
d8b8217c
PB
193'%cl':: author email local-part (the part before the '@' sign)
194'%cL':: author local-part (see '%cl') respecting .mailmap, see
195 linkgit:git-shortlog[1] or linkgit:git-blame[1])
42617752
AW
196'%cd':: committer date (format respects --date= option)
197'%cD':: committer date, RFC2822 style
198'%cr':: committer date, relative
199'%ct':: committer date, UNIX timestamp
200'%ci':: committer date, ISO 8601-like format
201'%cI':: committer date, strict ISO 8601 format
0df62117 202'%cs':: committer date, short format (`YYYY-MM-DD`)
42617752
AW
203'%d':: ref names, like the --decorate option of linkgit:git-log[1]
204'%D':: ref names without the " (", ")" wrapping.
42977bf5
JH
205'%S':: ref name given on the command line by which the commit was reached
206 (like `git log --source`), only works with `git log`
42617752
AW
207'%e':: encoding
208'%s':: subject
209'%f':: sanitized subject line, suitable for a filename
210'%b':: body
211'%B':: raw body (unwrapped subject and body)
2aea7a51 212ifndef::git-rev-list[]
42617752 213'%N':: commit notes
2aea7a51 214endif::git-rev-list[]
42617752
AW
215'%GG':: raw verification message from GPG for a signed commit
216'%G?':: show "G" for a good (valid) signature,
217 "B" for a bad signature,
218 "U" for a good signature with unknown validity,
219 "X" for a good signature that has expired,
220 "Y" for a good signature made by an expired key,
221 "R" for a good signature made by a revoked key,
222 "E" if the signature cannot be checked (e.g. missing key)
223 and "N" for no signature
224'%GS':: show the name of the signer for a signed commit
225'%GK':: show the key used to sign a signed commit
226'%GF':: show the fingerprint of the key used to sign a signed commit
227'%GP':: show the fingerprint of the primary key whose subkey was used
228 to sign a signed commit
54887b46 229'%GT':: show the trust level for the key used to sign a signed commit
42617752 230'%gD':: reflog selector, e.g., `refs/stash@{1}` or `refs/stash@{2
4fd39c76 231 minutes ago}`; the format follows the rules described for the
42617752
AW
232 `-g` option. The portion before the `@` is the refname as
233 given on the command line (so `git log -g refs/heads/master`
234 would yield `refs/heads/master@{0}`).
235'%gd':: shortened reflog selector; same as `%gD`, but the refname
236 portion is shortened for human readability (so
237 `refs/heads/master` becomes just `master`).
238'%gn':: reflog identity name
239'%gN':: reflog identity name (respecting .mailmap, see
240 linkgit:git-shortlog[1] or linkgit:git-blame[1])
241'%ge':: reflog identity email
242'%gE':: reflog identity email (respecting .mailmap, see
243 linkgit:git-shortlog[1] or linkgit:git-blame[1])
244'%gs':: reflog subject
245'%(trailers[:options])':: display the trailers of the body as
246 interpreted by
247 linkgit:git-interpret-trailers[1]. The
248 `trailers` string may be followed by a colon
249 and zero or more comma-separated options:
250bea0c
AW
250** 'key=<K>': only show trailers with specified key. Matching is done
251 case-insensitively and trailing colon is optional. If option is
252 given multiple times trailer lines matching any of the keys are
253 shown. This option automatically enables the `only` option so that
254 non-trailer lines in the trailer block are hidden. If that is not
255 desired it can be disabled with `only=false`. E.g.,
256 `%(trailers:key=Reviewed-by)` shows trailer lines with key
257 `Reviewed-by`.
4f732e0f
AW
258** 'only[=val]': select whether non-trailer lines from the trailer
259 block should be included. The `only` keyword may optionally be
260 followed by an equal sign and one of `true`, `on`, `yes` to omit or
261 `false`, `off`, `no` to show the non-trailer lines. If option is
262 given without value it is enabled. If given multiple times the last
263 value is used.
0b691d86
AW
264** 'separator=<SEP>': specify a separator inserted between trailer
265 lines. When this option is not given each trailer line is
266 terminated with a line feed character. The string SEP may contain
267 the literal formatting codes described above. To use comma as
268 separator one must use `%x2C` as it would otherwise be parsed as
269 next option. If separator option is given multiple times only the
270 last one is used. E.g., `%(trailers:key=Ticket,separator=%x2C )`
271 shows all trailer lines whose key is "Ticket" separated by a comma
272 and a space.
4f732e0f
AW
273** 'unfold[=val]': make it behave as if interpret-trailer's `--unfold`
274 option was given. In same way as to for `only` it can be followed
275 by an equal sign and explicit value. E.g.,
276 `%(trailers:only,unfold=true)` unfolds and shows all trailer lines.
d9b936db
AW
277** 'valueonly[=val]': skip over the key part of the trailer line and only
278 show the value part. Also this optionally allows explicit value.
fa5b4f37 279
8f8f5476
TR
280NOTE: Some placeholders may depend on other options given to the
281revision traversal engine. For example, the `%g*` reflog options will
282insert an empty string unless we are traversing reflog entries (e.g., by
9271095c
HJ
283`git log -g`). The `%d` and `%D` placeholders will use the "short"
284decoration format if `--decorate` was not already provided on the command
285line.
8f8f5476 286
6cf378f0 287If you add a `+` (plus sign) after '%' of a placeholder, a line-feed
9fa708da
JH
288is inserted immediately before the expansion if and only if the
289placeholder expands to a non-empty string.
290
8abc09c0
SG
291If you add a `-` (minus sign) after '%' of a placeholder, all consecutive
292line-feeds immediately preceding the expansion are deleted if and only if the
9fa708da
JH
293placeholder expands to an empty string.
294
7b88176e
MG
295If you add a ` ` (space) after '%' of a placeholder, a space
296is inserted immediately before the expansion if and only if the
297placeholder expands to a non-empty string.
298
fa5b4f37
JK
299* 'tformat:'
300+
301The 'tformat:' format works exactly like 'format:', except that it
302provides "terminator" semantics instead of "separator" semantics. In
303other words, each commit has the message terminator character (usually a
304newline) appended, rather than a separator placed between entries.
305This means that the final entry of a single-line format will be properly
306terminated with a new line, just as the "oneline" format does.
307For example:
308+
309---------------------
310$ git log -2 --pretty=format:%h 4da45bef \
311 | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
3124da45be
3137134973 -- NO NEWLINE
314
315$ git log -2 --pretty=tformat:%h 4da45bef \
316 | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
3174da45be
3187134973
319---------------------
36407548
NS
320+
321In addition, any unrecognized string that has a `%` in it is interpreted
322as if it has `tformat:` in front of it. For example, these two are
323equivalent:
324+
325---------------------
326$ git log -2 --pretty=tformat:%h 4da45bef
327$ git log -2 --pretty=%h 4da45bef
328---------------------