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

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


SYNOPSIS
--------
[synopsis]
git log [<options>] [<revision-range>] [[--] <path>...]

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

:git-log: 1
include::rev-list-description.adoc[]

The command takes options applicable to the linkgit:git-rev-list[1]
command to control what is shown and how, and options applicable to
the linkgit:git-diff[1] command 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. Possible values
	are:
+
--
`short`;; the ref name prefixes `refs/heads/`, `refs/tags/` and
	`refs/remotes/` are not printed.
`full`;; the full ref name (including prefix) is printed.
`auto`;; 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 option `--decorate` is short-hand for `--decorate=short`. Default to
configuration value of `log.decorate` if configured, otherwise, `auto`.

`--decorate-refs=<pattern>`::
`--decorate-refs-exclude=<pattern>`::
	For each candidate reference, do not use it for decoration if it
	matches any of the _<pattern>_ parameters given to
	`--decorate-refs-exclude` or if it doesn't match any of the
	_<pattern>_ parameters given to `--decorate-refs`.
	The `log.excludeDecoration` config option allows excluding refs from
	the decorations, but an explicit `--decorate-refs` pattern will
	override a match in `log.excludeDecoration`.
+
If none of these options or config settings are given, then references are
used as decoration if they match `HEAD`, `refs/heads/`, `refs/remotes/`,
`refs/stash/`, or `refs/tags/`.

`--clear-decorations`::
	When specified, this option clears all previous `--decorate-refs`
	or `--decorate-refs-exclude` options and relaxes the default
	decoration filter to include all references. This option is
	assumed if the config value `log.initialDecorationSet` is set to
	`all`.

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

`--mailmap`::
`--no-mailmap`::
`--use-mailmap`::
`--no-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.

include::line-range-options.adoc[]

_<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.adoc[]

include::pretty-formats.adoc[]

DIFF FORMATTING
---------------

By default, `git log` does not generate any diff output. The options
below can be used to show the changes made by each commit.

Note that unless one of `--diff-merges` variants (including short
`-m`, `-c`, `--cc`, and `--dd` options) is explicitly given, merge commits
will not show a diff, even if a diff format like `--patch` is
selected, nor will they match search options like `-S`. The exception
is when `--first-parent` is in use, in which case `first-parent` is
the default format for merge commits.

:git-log: 1
:diff-merges-default: `off`
include::diff-options.adoc[]

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

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.adoc[]

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.

include::includes/cmd-config-section-rest.adoc[]

include::config/log.adoc[]

include::config/notes.adoc[]

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