Merge branch 'maint'
[gitweb.git] / Documentation / pretty-formats.txt
index fb0b0b95829e0fc1aa98019554ce12e9b45d1f63..f18d33e00b7166104a200fbeaa854fb911273931 100644 (file)
@@ -1,41 +1,42 @@
---pretty[='<format>']::
-
-        Pretty-prints the details of a commit.  `--pretty`
-       without an explicit `=<format>` defaults to 'medium'.
-       If the commit is a merge, and if the pretty-format
-        is not 'oneline', 'email' or 'raw', an additional line is
-        inserted before the 'Author:' line.  This line begins with
-        "Merge: " and the sha1s of ancestral commits are printed,
-        separated by spaces.  Note that the listed commits may not
-        necessarily be the list of the *direct* parent commits if you
-        have limited your view of history: for example, if you are
-        only interested in changes related to a certain directory or
-        file.  Here are some additional details for each format:
-
-        * 'oneline'
+PRETTY FORMATS
+--------------
+
+If the commit is a merge, and if the pretty-format
+is not 'oneline', 'email' or 'raw', an additional line is
+inserted before the 'Author:' line.  This line begins with
+"Merge: " and the sha1s of ancestral commits are printed,
+separated by spaces.  Note that the listed commits may not
+necessarily be the list of the *direct* parent commits if you
+have limited your view of history: for example, if you are
+only interested in changes related to a certain directory or
+file.
+
+Here are some additional details for each format:
+
+* 'oneline'
 
          <sha1> <title line>
 +
 This is designed to be as compact as possible.
 
-        * 'short'
+* 'short'
 
          commit <sha1>
          Author: <author>
 
              <title line>
 
-        * 'medium'
+* 'medium'
 
          commit <sha1>
          Author: <author>
-         Date: <date>
+         Date: <author date>
 
              <title line>
 
              <full commit message>
 
-        * 'full'
+* 'full'
 
          commit <sha1>
          Author: <author>
@@ -45,30 +46,28 @@ This is designed to be as compact as possible.
 
              <full commit message>
 
-        * 'fuller'
+* 'fuller'
 
          commit <sha1>
          Author: <author>
-         AuthorDate: <date & time>
+         AuthorDate: <author date>
          Commit: <committer>
-         CommitDate: <date & time>
+         CommitDate: <committer date>
 
               <title line>
 
               <full commit message>
 
-
-        * 'email'
+* 'email'
 
          From <sha1> <date>
          From: <author>
-         Date: <date & time>
+         Date: <author date>
          Subject: [PATCH] <title line>
 
-         full commit message>
-
+         <full commit message>
 
-       * 'raw'
+* 'raw'
 +
 The 'raw' format shows the entire commit exactly as
 stored in the commit object.  Notably, the SHA1s are
@@ -77,9 +76,76 @@ displayed in full, regardless of whether --abbrev or
 true parent commits, without taking grafts nor history
 simplification into account.
 
---encoding[=<encoding>]::
-       The commit objects record the encoding used for the log message
-       in their encoding header; this option can be used to tell the
-       command to re-code the commit log message in the encoding
-       preferred by the user.  For non plumbing commands this
-       defaults to UTF-8.
+* 'format:'
++
+The 'format:' format allows you to specify which information
+you want to show. It works a little bit like printf format,
+with the notable exception that you get a newline with '%n'
+instead of '\n'.
++
+E.g, 'format:"The author of %h was %an, %ar%nThe title was >>%s<<%n"'
+would show something like this:
++
+-------
+The author of fe6e0ee was Junio C Hamano, 23 hours ago
+The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<
+
+--------
++
+The placeholders are:
+
+- '%H': commit hash
+- '%h': abbreviated commit hash
+- '%T': tree hash
+- '%t': abbreviated tree hash
+- '%P': parent hashes
+- '%p': abbreviated parent hashes
+- '%an': author name
+- '%aN': author name (respecting .mailmap)
+- '%ae': author email
+- '%ad': author date (format respects --date= option)
+- '%aD': author date, RFC2822 style
+- '%ar': author date, relative
+- '%at': author date, UNIX timestamp
+- '%ai': author date, ISO 8601 format
+- '%cn': committer name
+- '%cN': committer name (respecting .mailmap)
+- '%ce': committer email
+- '%cd': committer date
+- '%cD': committer date, RFC2822 style
+- '%cr': committer date, relative
+- '%ct': committer date, UNIX timestamp
+- '%ci': committer date, ISO 8601 format
+- '%d': ref names, like the --decorate option of linkgit:git-log[1]
+- '%e': encoding
+- '%s': subject
+- '%b': body
+- '%Cred': switch color to red
+- '%Cgreen': switch color to green
+- '%Cblue': switch color to blue
+- '%Creset': reset color
+- '%m': left, right or boundary mark
+- '%n': newline
+- '%x00': print a byte from a hex code
+
+* 'tformat:'
++
+The 'tformat:' format works exactly like 'format:', except that it
+provides "terminator" semantics instead of "separator" semantics. In
+other words, each commit has the message terminator character (usually a
+newline) appended, rather than a separator placed between entries.
+This means that the final entry of a single-line format will be properly
+terminated with a new line, just as the "oneline" format does.
+For example:
++
+---------------------
+$ git log -2 --pretty=format:%h 4da45bef \
+  | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
+4da45be
+7134973 -- NO NEWLINE
+
+$ git log -2 --pretty=tformat:%h 4da45bef \
+  | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
+4da45be
+7134973
+---------------------