setup: add gentle version of read_gitfile
[gitweb.git] / Documentation / git-log.txt
index 13a3998302a2817bb36d7555f171311ce19a3d0c..5692945a0b38c0b9e8e79e73a9a755c292224c98 100644 (file)
@@ -8,37 +8,205 @@ git-log - Show commit logs
 
 SYNOPSIS
 --------
-'git-log' <option>...
+[verse]
+'git log' [<options>] [<revision range>] [[\--] <path>...]
 
 DESCRIPTION
 -----------
-Shows the commit logs.  This command internally invokes
-'git-rev-list', and the command line options are passed to that
-command.
+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.
 
-This manual page describes only the most frequently used options.
 
 OPTIONS
 -------
---pretty=<format>:
-       Controls the way the commit log is formatted.
 
---max-count=<n>::
-       Limits the number of commits to show.
+--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 :<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'
 
-<since>..<until>::
-       Show only commits between the named two commits.
+`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.
 
-Author
-------
-Written by Linus Torvalds <torvalds@osdl.org>
+`git log --follow builtin/rev-list.c`::
 
-Documentation
---------------
-Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
+       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 gitlink:git[7] suite
-
+Part of the linkgit:git[1] suite