Documentation / git-log.txton commit graph: add commit graph design document (ae30d7b)
   1git-log(1)
   2==========
   3
   4NAME
   5----
   6git-log - Show commit logs
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git log' [<options>] [<revision range>] [[\--] <path>...]
  13
  14DESCRIPTION
  15-----------
  16Shows the commit logs.
  17
  18The command takes options applicable to the `git rev-list`
  19command to control what is shown and how, and options applicable to
  20the `git diff-*` commands to control how the changes
  21each commit introduces are shown.
  22
  23
  24OPTIONS
  25-------
  26
  27--follow::
  28        Continue listing the history of a file beyond renames
  29        (works only for a single file).
  30
  31--no-decorate::
  32--decorate[=short|full|auto|no]::
  33        Print out the ref names of any commits that are shown. If 'short' is
  34        specified, the ref name prefixes 'refs/heads/', 'refs/tags/' and
  35        'refs/remotes/' will not be printed. If 'full' is specified, the
  36        full ref name (including prefix) will be printed. If 'auto' is
  37        specified, then if the output is going to a terminal, the ref names
  38        are shown as if 'short' were given, otherwise no ref names are
  39        shown. The default option is 'short'.
  40
  41--decorate-refs=<pattern>::
  42--decorate-refs-exclude=<pattern>::
  43        If no `--decorate-refs` is given, pretend as if all refs were
  44        included.  For each candidate, do not use it for decoration if it
  45        matches any patterns given to `--decorate-refs-exclude` or if it
  46        doesn't match any of the patterns given to `--decorate-refs`.
  47
  48--source::
  49        Print out the ref name given on the command line by which each
  50        commit was reached.
  51
  52--use-mailmap::
  53        Use mailmap file to map author and committer names and email
  54        addresses to canonical real names and email addresses. See
  55        linkgit:git-shortlog[1].
  56
  57--full-diff::
  58        Without this flag, `git log -p <path>...` shows commits that
  59        touch the specified paths, and diffs about the same specified
  60        paths.  With this, the full diff is shown for commits that touch
  61        the specified paths; this means that "<path>..." limits only
  62        commits, and doesn't limit diff for those commits.
  63+
  64Note that this affects all diff-based output types, e.g. those
  65produced by `--stat`, etc.
  66
  67--log-size::
  68        Include a line ``log size <number>'' in the output for each commit,
  69        where <number> is the length of that commit's message in bytes.
  70        Intended to speed up tools that read log messages from `git log`
  71        output by allowing them to allocate space in advance.
  72
  73-L <start>,<end>:<file>::
  74-L :<funcname>:<file>::
  75        Trace the evolution of the line range given by "<start>,<end>"
  76        (or the function name regex <funcname>) within the <file>.  You may
  77        not give any pathspec limiters.  This is currently limited to
  78        a walk starting from a single revision, i.e., you may only
  79        give zero or one positive revision arguments.
  80        You can specify this option more than once.
  81+
  82include::line-range-format.txt[]
  83
  84<revision range>::
  85        Show only commits in the specified revision range.  When no
  86        <revision range> is specified, it defaults to `HEAD` (i.e. the
  87        whole history leading to the current commit).  `origin..HEAD`
  88        specifies all the commits reachable from the current commit
  89        (i.e. `HEAD`), but not from `origin`. For a complete list of
  90        ways to spell <revision range>, see the 'Specifying Ranges'
  91        section of linkgit:gitrevisions[7].
  92
  93[\--] <path>...::
  94        Show only commits that are enough to explain how the files
  95        that match the specified paths came to be.  See 'History
  96        Simplification' below for details and other simplification
  97        modes.
  98+
  99Paths may need to be prefixed with ``\-- '' to separate them from
 100options or the revision range, when confusion arises.
 101
 102include::rev-list-options.txt[]
 103
 104include::pretty-formats.txt[]
 105
 106COMMON DIFF OPTIONS
 107-------------------
 108
 109:git-log: 1
 110include::diff-options.txt[]
 111
 112include::diff-generate-patch.txt[]
 113
 114EXAMPLES
 115--------
 116`git log --no-merges`::
 117
 118        Show the whole commit history, but skip any merges
 119
 120`git log v2.6.12.. include/scsi drivers/scsi`::
 121
 122        Show all commits since version 'v2.6.12' that changed any file
 123        in the `include/scsi` or `drivers/scsi` subdirectories
 124
 125`git log --since="2 weeks ago" -- gitk`::
 126
 127        Show the changes during the last two weeks to the file 'gitk'.
 128        The ``--'' is necessary to avoid confusion with the *branch* named
 129        'gitk'
 130
 131`git log --name-status release..test`::
 132
 133        Show the commits that are in the "test" branch but not yet
 134        in the "release" branch, along with the list of paths
 135        each commit modifies.
 136
 137`git log --follow builtin/rev-list.c`::
 138
 139        Shows the commits that changed `builtin/rev-list.c`, including
 140        those commits that occurred before the file was given its
 141        present name.
 142
 143`git log --branches --not --remotes=origin`::
 144
 145        Shows all commits that are in any of local branches but not in
 146        any of remote-tracking branches for 'origin' (what you have that
 147        origin doesn't).
 148
 149`git log master --not --remotes=*/master`::
 150
 151        Shows all commits that are in local master but not in any remote
 152        repository master branches.
 153
 154`git log -p -m --first-parent`::
 155
 156        Shows the history including change diffs, but only from the
 157        ``main branch'' perspective, skipping commits that come from merged
 158        branches, and showing full diffs of changes introduced by the merges.
 159        This makes sense only when following a strict policy of merging all
 160        topic branches when staying on a single integration branch.
 161
 162`git log -L '/int main/',/^}/:main.c`::
 163
 164        Shows how the function `main()` in the file `main.c` evolved
 165        over time.
 166
 167`git log -3`::
 168
 169        Limits the number of commits to show to 3.
 170
 171DISCUSSION
 172----------
 173
 174include::i18n.txt[]
 175
 176CONFIGURATION
 177-------------
 178
 179See linkgit:git-config[1] for core variables and linkgit:git-diff[1]
 180for settings related to diff generation.
 181
 182format.pretty::
 183        Default for the `--format` option.  (See 'Pretty Formats' above.)
 184        Defaults to `medium`.
 185
 186i18n.logOutputEncoding::
 187        Encoding to use when displaying logs.  (See 'Discussion' above.)
 188        Defaults to the value of `i18n.commitEncoding` if set, and UTF-8
 189        otherwise.
 190
 191log.date::
 192        Default format for human-readable dates.  (Compare the
 193        `--date` option.)  Defaults to "default", which means to write
 194        dates like `Sat May 8 19:35:34 2010 -0500`.
 195
 196log.follow::
 197        If `true`, `git log` will act as if the `--follow` option was used when
 198        a single <path> is given.  This has the same limitations as `--follow`,
 199        i.e. it cannot be used to follow multiple files and does not work well
 200        on non-linear history.
 201
 202log.showRoot::
 203        If `false`, `git log` and related commands will not treat the
 204        initial commit as a big creation event.  Any root commits in
 205        `git log -p` output would be shown without a diff attached.
 206        The default is `true`.
 207
 208log.showSignature::
 209        If `true`, `git log` and related commands will act as if the
 210        `--show-signature` option was passed to them.
 211
 212mailmap.*::
 213        See linkgit:git-shortlog[1].
 214
 215notes.displayRef::
 216        Which refs, in addition to the default set by `core.notesRef`
 217        or `GIT_NOTES_REF`, to read notes from when showing commit
 218        messages with the `log` family of commands.  See
 219        linkgit:git-notes[1].
 220+
 221May be an unabbreviated ref name or a glob and may be specified
 222multiple times.  A warning will be issued for refs that do not exist,
 223but a glob that does not match any refs is silently ignored.
 224+
 225This setting can be disabled by the `--no-notes` option,
 226overridden by the `GIT_NOTES_DISPLAY_REF` environment variable,
 227and overridden by the `--notes=<ref>` option.
 228
 229GIT
 230---
 231Part of the linkgit:git[1] suite