git-log(1)
==========

NAME
----
git-log - Show commit logs


SYNOPSIS
--------
[verse]
'git log' [<options>] [<revision range>] [[\--] <path>...]

DESCRIPTION
-----------
Shows the commit logs.

The command takes options applicable to the `git rev-list`
command to control what is shown and how, and options applicable to
the `git diff-*` commands to control how the changes
each commit introduces are shown.


OPTIONS
-------

--follow::
	Continue listing the history of a file beyond renames
	(works only for a single file).

--no-decorate::
--decorate[=short|full|auto|no]::
	Print out the ref names of any commits that are shown. If 'short' is
	specified, the ref name prefixes 'refs/heads/', 'refs/tags/' and
	'refs/remotes/' will not be printed. If 'full' is specified, the
	full ref name (including prefix) will be printed. If 'auto' is
	specified, then if the output is going to a terminal, the ref names
	are shown as if 'short' were given, otherwise no ref names are
	shown. The default option is 'short'.

--decorate-refs=<pattern>::
--decorate-refs-exclude=<pattern>::
	If no `--decorate-refs` is given, pretend as if all refs were
	included.  For each candidate, do not use it for decoration if it
	matches any patterns given to `--decorate-refs-exclude` or if it
	doesn't match any of the patterns given to `--decorate-refs`.

--source::
	Print out the ref name given on the command line by which each
	commit was reached.

--use-mailmap::
	Use mailmap file to map author and committer names and email
	addresses to canonical real names and email addresses. See
	linkgit:git-shortlog[1].

--full-diff::
	Without this flag, `git log -p <path>...` shows commits that
	touch the specified paths, and diffs about the same specified
	paths.  With this, the full diff is shown for commits that touch
	the specified paths; this means that "<path>..." limits only
	commits, and doesn't limit diff for those commits.
+
Note that this affects all diff-based output types, e.g. those
produced by `--stat`, etc.

--log-size::
	Include a line ``log size <number>'' in the output for each commit,
	where <number> is the length of that commit's message in bytes.
	Intended to speed up tools that read log messages from `git log`
	output by allowing them to allocate space in advance.

-L <start>,<end>:<file>::
-L :<funcname>:<file>::
	Trace the evolution of the line range given by "<start>,<end>"
	(or the function name regex <funcname>) within the <file>.  You may
	not give any pathspec limiters.  This is currently limited to
	a walk starting from a single revision, i.e., you may only
	give zero or one positive revision arguments.
	You can specify this option more than once.
+
include::line-range-format.txt[]

<revision range>::
	Show only commits in the specified revision range.  When no
	<revision range> is specified, it defaults to `HEAD` (i.e. the
	whole history leading to the current commit).  `origin..HEAD`
	specifies all the commits reachable from the current commit
	(i.e. `HEAD`), but not from `origin`. For a complete list of
	ways to spell <revision range>, see the 'Specifying Ranges'
	section of linkgit:gitrevisions[7].

[\--] <path>...::
	Show only commits that are enough to explain how the files
	that match the specified paths came to be.  See 'History
	Simplification' below for details and other simplification
	modes.
+
Paths may need to be prefixed with ``\-- '' to separate them from
options or the revision range, when confusion arises.

include::rev-list-options.txt[]

include::pretty-formats.txt[]

COMMON DIFF OPTIONS
-------------------

:git-log: 1
include::diff-options.txt[]

include::diff-generate-patch.txt[]

EXAMPLES
--------
`git log --no-merges`::

	Show the whole commit history, but skip any merges

`git log v2.6.12.. include/scsi drivers/scsi`::

	Show all commits since version 'v2.6.12' that changed any file
	in the `include/scsi` or `drivers/scsi` subdirectories

`git log --since="2 weeks ago" -- gitk`::

	Show the changes during the last two weeks to the file 'gitk'.
	The ``--'' is necessary to avoid confusion with the *branch* named
	'gitk'

`git log --name-status release..test`::

	Show the commits that are in the "test" branch but not yet
	in the "release" branch, along with the list of paths
	each commit modifies.

`git log --follow builtin/rev-list.c`::

	Shows the commits that changed `builtin/rev-list.c`, including
	those commits that occurred before the file was given its
	present name.

`git log --branches --not --remotes=origin`::

	Shows all commits that are in any of local branches but not in
	any of remote-tracking branches for 'origin' (what you have that
	origin doesn't).

`git log master --not --remotes=*/master`::

	Shows all commits that are in local master but not in any remote
	repository master branches.

`git log -p -m --first-parent`::

	Shows the history including change diffs, but only from the
	``main branch'' perspective, skipping commits that come from merged
	branches, and showing full diffs of changes introduced by the merges.
	This makes sense only when following a strict policy of merging all
	topic branches when staying on a single integration branch.

`git log -L '/int main/',/^}/:main.c`::

	Shows how the function `main()` in the file `main.c` evolved
	over time.

`git log -3`::

	Limits the number of commits to show to 3.

DISCUSSION
----------

include::i18n.txt[]

CONFIGURATION
-------------

See linkgit:git-config[1] for core variables and linkgit:git-diff[1]
for settings related to diff generation.

format.pretty::
	Default for the `--format` option.  (See 'Pretty Formats' above.)
	Defaults to `medium`.

i18n.logOutputEncoding::
	Encoding to use when displaying logs.  (See 'Discussion' above.)
	Defaults to the value of `i18n.commitEncoding` if set, and UTF-8
	otherwise.

log.date::
	Default format for human-readable dates.  (Compare the
	`--date` option.)  Defaults to "default", which means to write
	dates like `Sat May 8 19:35:34 2010 -0500`.

log.follow::
	If `true`, `git log` will act as if the `--follow` option was used when
	a single <path> is given.  This has the same limitations as `--follow`,
	i.e. it cannot be used to follow multiple files and does not work well
	on non-linear history.

log.showRoot::
	If `false`, `git log` and related commands will not treat the
	initial commit as a big creation event.  Any root commits in
	`git log -p` output would be shown without a diff attached.
	The default is `true`.

log.showSignature::
	If `true`, `git log` and related commands will act as if the
	`--show-signature` option was passed to them.

mailmap.*::
	See linkgit:git-shortlog[1].

notes.displayRef::
	Which refs, in addition to the default set by `core.notesRef`
	or `GIT_NOTES_REF`, to read notes from when showing commit
	messages with the `log` family of commands.  See
	linkgit:git-notes[1].
+
May be an unabbreviated ref name or a glob and may be specified
multiple times.  A warning will be issued for refs that do not exist,
but a glob that does not match any refs is silently ignored.
+
This setting can be disabled by the `--no-notes` option,
overridden by the `GIT_NOTES_DISPLAY_REF` environment variable,
and overridden by the `--notes=<ref>` option.

GIT
---
Part of the linkgit:git[1] suite
