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

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


SYNOPSIS
--------
'git log' [<options>] [<since>..<until>] [[\--] <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
-------

-<n>::
	Limits the number of commits to show.

<since>..<until>::
	Show only commits between the named two commits.  When
	either <since> or <until> is omitted, it defaults to
	`HEAD`, i.e. the tip of the current branch.
	For a more complete list of ways to spell <since>
	and <until>, see linkgit:gitrevisions[1].

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

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

--log-size::
	Before the log message print out its size in bytes. Intended
	mainly for porcelain tools consumption. If git is unable to
	produce a valid value size is set to zero.
	Note that only message is considered, if also a diff is shown
	its size is not included.

[\--] <path>...::
	Show only commits that affect any of the specified paths. To
	prevent confusion with options and branch names, paths may need
	to be prefixed with "\-- " to separate them from options or
	refnames.

Common diff options
~~~~~~~~~~~~~~~~~~~

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

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

include::pretty-formats.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.


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, 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.file::
	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-standard-notes` option,
overridden by the 'GIT_NOTES_DISPLAY_REF' environment variable,
and supplemented by the `--show-notes` option.

Author
------
Written by Linus Torvalds <torvalds@osdl.org>

Documentation
--------------
Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.

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