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|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. The default option
	is 'short'.

--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 :<regex>:<file>::
	Trace the evolution of the line range given by "<start>,<end>"
	(or the funcname regex <regex>) 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.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`.

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
