Search notes:

Git: --format | --pretty

--pretty is a synonym for the --format option
git log  --format=…
git show --pretty=…

Built-in formats

Equivalent to
oneline %H %s Full (40 character) hash and subject (aka title) - Intended to be as compact as possible
short
medium
full
fuller
reference format:%C(auto)%h (%s, %as) For example 4b2ee6d2b33d (Merge tag 'usb-6.7-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb, 2023-12-23)
email
mboxrd Like email, but From: lines are quoted with one >, regardless of the amounts of >
raw Compare with git log --raw
git log --pretty=oneline

Placeholders

Placeholders start with a percent sign % (in the same sprit as also used in the printf family). The following simple format prints the log's subjects (%s).
git log --pretty=%s
If placeholders are separated by spaces, the format must be put into (single or double) quotes:
git log --pretty='%s %H'
In the following tables, the percent sign is not shown for readability.

Hash related placeholders

long abbreviated
H h commit hash
T t tree hash
P p parent hash
The long hash is represented with 40 characters, the abbreviated hash with 7 characters.

Related to author (%a…, %c…)

Placeholders that are related to a commit's author start with %a, those related to a committer with %c.
So, %an is the name of the author, %cn the name of the committer.
Respecting .mailmap
n N Name
e E eMail
l L The email's portion left of the at (@) sign (local part)
The following formats relate to the commit dates. Again, they're prefixed with %a or %c.
Example
d Date, respects --date= option
D Date in RFC 2822 format Mon, 25 Apr 2022 23:53:09 +0200
r Relative format 15 hours ago, 9 days ago or 3 weeks ago etc.
t In Unix time 1653998153 (seconds since 1970-01-01)
i In ISO 8601 format 2022-05-02 15:49:11 +0200
I In strict ISO 8601 format 2022-05-02T15:49:11+02:00
s Short format 2022-05-12
h Human format
git log --date=format:'%Y-%m-%d %H:%M:%S' --pretty='%ad   %<(20)%ar %s'

Ref names

Compare with the --decorate option of git log
d
D without the ", wrapping

...

s subject (aka title). %s vs %f[Compare with %f\
b body
B raw body (unwrapped subject and body)
N commit notes
f sanitized subject line, compare with %s
e encoding

Related to reflog

gD reflog selector
gd shortened reflog selector (refs/heads/master becomes master)
gs reflog subject
gn reflog identity name
gN reflog identity name (respecting .mailmap)
ge reflog identity email
gE reflog identity email (respecting .mailmap)

Related to signed commits

GG raw verification message from GPG for a signed commit
G? Reports «quality» of signed message: G = good; B = bad; U = good with unknown validity; X = good, but expired; Y = good signature made by expired key; R = good signature made be revoked key; E = signature cannot be checked (because of missing key?); N = no signature
GS Name of signer
GK Key used for signing
GF Fingerprint of key
GP Fingreprint of primary key whose subkey was used sign a signed commit
GT Trust level of key

Insert a character

n New line
% A percent sign
xnn The byte represented by the hexadecimal value nn

Aligning/padding output

<(w) Pad next token to at least w characters
<(w,trunc) Pad next token to w characters, trunctate exceeding characters (There is also ltrunc and mtrunc).
<|(w)
>(w) etc. Similar to <(w) etc, but padding on left side
><(w) centering text
>>(w)
git log --pretty='%<(50,trunc) %s %H'

Colors

%C… affects the colors of the placeholders following the instruction.
Three color names are recognized: red, green and blue.
An RGB value can be specified with %C(#rrggbb). The following command prints the subject (%s) in orange and the commit hash (%H`) in a blue-ish color:
git log --pretty='%C(#ff7f00) %s %C(#6090e0) %h %Creset'

Others

m A left (<), right (>) or boundary (-) mark.

TODO

Line wrapping mode (compare git shortlog -w…)
git log --pretty='%w(40,6,7) %s %H bla'
Human readable format (like git describe)
git log --pretty='%(describe)'
ref name given on the command line by which the commit was reached (like git log --source)
git log --pretty='%S'
git log --pretty='%(trailers[:options])'

%s vs %f

%f sees to replace adjacent spaces, colons, apostrophes, slashes etc. with one hyphen:
$ ~/linux git log -1 --format=%s ; git log -1 --format=%f
Merge tag 'gpio-fixes-for-v6.7-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux
Merge-tag-gpio-fixes-for-v6.7-rc8-of-git-git.kernel.org-pub-scm-linux-kernel-git-brgl-linux

Index