--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', '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.

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, show this notes ref instead of the
default notes ref(s). The ref specifies 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.
