--pretty[=<format>]::
--format=<format>::

	Pretty-print the contents of the commit logs in a given format,
	where '<format>' can be one of 'oneline', 'short', 'medium',
	'full', 'fuller', 'reference', 'email', 'raw', 'format:<string>'
	and 'tformat:<string>'.  When '<format>' is none of the above,
	and has '%placeholder' in it, it acts as if
	'--pretty=tformat:<format>' were given.
+
See the "PRETTY FORMATS" section for some additional details for each
format.  When '=<format>' part is omitted, it defaults to 'medium'.
+
Note: you can specify the default pretty format in the repository
configuration (see linkgit:git-config[1]).

--abbrev-commit::
	Instead of showing the full 40-byte hexadecimal commit object
	name, show only a partial prefix.  Non default number of
	digits can be specified with "--abbrev=<n>" (which also modifies
	diff output, if it is displayed).
+
This should make "--pretty=oneline" a whole lot more readable for
people using 80-column terminals.

--no-abbrev-commit::
	Show the full 40-byte hexadecimal commit object name. This negates
	`--abbrev-commit` and those options which imply it such as
	"--oneline". It also overrides the `log.abbrevCommit` variable.

--oneline::
	This is a shorthand for "--pretty=oneline --abbrev-commit"
	used together.

--encoding=<encoding>::
	The commit objects record the encoding used for the log message
	in their encoding header; this option can be used to tell the
	command to re-code the commit log message in the encoding
	preferred by the user.  For non plumbing commands this
	defaults to UTF-8. Note that if an object claims to be encoded
	in `X` and we are outputting in `X`, we will output the object
	verbatim; this means that invalid sequences in the original
	commit may be copied to the output.

--expand-tabs=<n>::
--expand-tabs::
--no-expand-tabs::
	Perform a tab expansion (replace each tab with enough spaces
	to fill to the next display column that is multiple of '<n>')
	in the log message before showing it in the output.
	`--expand-tabs` is a short-hand for `--expand-tabs=8`, and
	`--no-expand-tabs` is a short-hand for `--expand-tabs=0`,
	which disables tab expansion.
+
By default, tabs are expanded in pretty formats that indent the log
message by 4 spaces (i.e.  'medium', which is the default, 'full',
and 'fuller').

ifndef::git-rev-list[]
--notes[=<ref>]::
	Show the notes (see linkgit:git-notes[1]) that annotate the
	commit, when showing the commit log message.  This is the default
	for `git log`, `git show` and `git whatchanged` commands when
	there is no `--pretty`, `--format`, or `--oneline` option given
	on the command line.
+
By default, the notes shown are from the notes refs listed in the
`core.notesRef` and `notes.displayRef` variables (or corresponding
environment overrides). See linkgit:git-config[1] for more details.
+
With an optional '<ref>' argument, use the ref to find the notes
to display.  The ref can specify the full refname when it begins
with `refs/notes/`; when it begins with `notes/`, `refs/` and otherwise
`refs/notes/` is prefixed to form a full name of the ref.
+
Multiple --notes options can be combined to control which notes are
being displayed. Examples: "--notes=foo" will show only notes from
"refs/notes/foo"; "--notes=foo --notes" will show both notes from
"refs/notes/foo" and from the default notes ref(s).

--no-notes::
	Do not show notes. This negates the above `--notes` option, by
	resetting the list of notes refs from which notes are shown.
	Options are parsed in the order given on the command line, so e.g.
	"--notes --notes=foo --no-notes --notes=bar" will only show notes
	from "refs/notes/bar".

--show-notes[=<ref>]::
--[no-]standard-notes::
	These options are deprecated. Use the above --notes/--no-notes
	options instead.
endif::git-rev-list[]

--show-signature::
	Check the validity of a signed commit object by passing the signature
	to `gpg --verify` and show the output.
