Documentation / pretty-formats.txton commit Merge branch 'by/blame-doc-m-c' into maint (3b3b9a6)
   1PRETTY FORMATS
   2--------------
   3
   4If the commit is a merge, and if the pretty-format
   5is not 'oneline', 'email' or 'raw', an additional line is
   6inserted before the 'Author:' line.  This line begins with
   7"Merge: " and the sha1s of ancestral commits are printed,
   8separated by spaces.  Note that the listed commits may not
   9necessarily be the list of the *direct* parent commits if you
  10have limited your view of history: for example, if you are
  11only interested in changes related to a certain directory or
  12file.
  13
  14Here are some additional details for each format:
  15
  16* 'oneline'
  17
  18          <sha1> <title line>
  19+
  20This is designed to be as compact as possible.
  21
  22* 'short'
  23
  24          commit <sha1>
  25          Author: <author>
  26
  27              <title line>
  28
  29* 'medium'
  30
  31          commit <sha1>
  32          Author: <author>
  33          Date:   <author date>
  34
  35              <title line>
  36
  37              <full commit message>
  38
  39* 'full'
  40
  41          commit <sha1>
  42          Author: <author>
  43          Commit: <committer>
  44
  45              <title line>
  46
  47              <full commit message>
  48
  49* 'fuller'
  50
  51          commit <sha1>
  52          Author:     <author>
  53          AuthorDate: <author date>
  54          Commit:     <committer>
  55          CommitDate: <committer date>
  56
  57               <title line>
  58
  59               <full commit message>
  60
  61* 'email'
  62
  63          From <sha1> <date>
  64          From: <author>
  65          Date: <author date>
  66          Subject: [PATCH] <title line>
  67
  68          <full commit message>
  69
  70* 'raw'
  71+
  72The 'raw' format shows the entire commit exactly as
  73stored in the commit object.  Notably, the SHA1s are
  74displayed in full, regardless of whether --abbrev or
  75--no-abbrev are used, and 'parents' information show the
  76true parent commits, without taking grafts nor history
  77simplification into account.
  78
  79* 'format:<string>'
  80+
  81The 'format:<string>' format allows you to specify which information
  82you want to show. It works a little bit like printf format,
  83with the notable exception that you get a newline with '%n'
  84instead of '\n'.
  85+
  86E.g, 'format:"The author of %h was %an, %ar%nThe title was >>%s<<%n"'
  87would show something like this:
  88+
  89-------
  90The author of fe6e0ee was Junio C Hamano, 23 hours ago
  91The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<
  92
  93--------
  94+
  95The placeholders are:
  96
  97- '%H': commit hash
  98- '%h': abbreviated commit hash
  99- '%T': tree hash
 100- '%t': abbreviated tree hash
 101- '%P': parent hashes
 102- '%p': abbreviated parent hashes
 103- '%an': author name
 104- '%aN': author name (respecting .mailmap, see linkgit:git-shortlog[1] or linkgit:git-blame[1])
 105- '%ae': author email
 106- '%aE': author email (respecting .mailmap, see linkgit:git-shortlog[1] or linkgit:git-blame[1])
 107- '%ad': author date (format respects --date= option)
 108- '%aD': author date, RFC2822 style
 109- '%ar': author date, relative
 110- '%at': author date, UNIX timestamp
 111- '%ai': author date, ISO 8601 format
 112- '%cn': committer name
 113- '%cN': committer name (respecting .mailmap, see linkgit:git-shortlog[1] or linkgit:git-blame[1])
 114- '%ce': committer email
 115- '%cE': committer email (respecting .mailmap, see linkgit:git-shortlog[1] or linkgit:git-blame[1])
 116- '%cd': committer date
 117- '%cD': committer date, RFC2822 style
 118- '%cr': committer date, relative
 119- '%ct': committer date, UNIX timestamp
 120- '%ci': committer date, ISO 8601 format
 121- '%d': ref names, like the --decorate option of linkgit:git-log[1]
 122- '%e': encoding
 123- '%s': subject
 124- '%f': sanitized subject line, suitable for a filename
 125- '%b': body
 126- '%N': commit notes
 127- '%gD': reflog selector, e.g., `refs/stash@\{1\}`
 128- '%gd': shortened reflog selector, e.g., `stash@\{1\}`
 129- '%gs': reflog subject
 130- '%Cred': switch color to red
 131- '%Cgreen': switch color to green
 132- '%Cblue': switch color to blue
 133- '%Creset': reset color
 134- '%C(...)': color specification, as described in color.branch.* config option
 135- '%m': left, right or boundary mark
 136- '%n': newline
 137- '%%': a raw '%'
 138- '%x00': print a byte from a hex code
 139- '%w([<w>[,<i1>[,<i2>]]])': switch line wrapping, like the -w option of
 140  linkgit:git-shortlog[1].
 141
 142NOTE: Some placeholders may depend on other options given to the
 143revision traversal engine. For example, the `%g*` reflog options will
 144insert an empty string unless we are traversing reflog entries (e.g., by
 145`git log -g`). The `%d` placeholder will use the "short" decoration
 146format if `--decorate` was not already provided on the command line.
 147
 148If you add a `{plus}` (plus sign) after '%' of a placeholder, a line-feed
 149is inserted immediately before the expansion if and only if the
 150placeholder expands to a non-empty string.
 151
 152If you add a `-` (minus sign) after '%' of a placeholder, line-feeds that
 153immediately precede the expansion are deleted if and only if the
 154placeholder expands to an empty string.
 155
 156* 'tformat:'
 157+
 158The 'tformat:' format works exactly like 'format:', except that it
 159provides "terminator" semantics instead of "separator" semantics. In
 160other words, each commit has the message terminator character (usually a
 161newline) appended, rather than a separator placed between entries.
 162This means that the final entry of a single-line format will be properly
 163terminated with a new line, just as the "oneline" format does.
 164For example:
 165+
 166---------------------
 167$ git log -2 --pretty=format:%h 4da45bef \
 168  | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
 1694da45be
 1707134973 -- NO NEWLINE
 171
 172$ git log -2 --pretty=tformat:%h 4da45bef \
 173  | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
 1744da45be
 1757134973
 176---------------------
 177+
 178In addition, any unrecognized string that has a `%` in it is interpreted
 179as if it has `tformat:` in front of it.  For example, these two are
 180equivalent:
 181+
 182---------------------
 183$ git log -2 --pretty=tformat:%h 4da45bef
 184$ git log -2 --pretty=%h 4da45bef
 185---------------------