| 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 hashes 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. |
| |
| There are several built-in formats, and you can define |
| additional formats by setting a pretty.<name> |
| config option to either another format name, or a |
| `format:` string, as described below (see |
| linkgit:git-config[1]). Here are the details of the |
| built-in formats: |
| |
| * `oneline` |
| |
| <hash> <title-line> |
| + |
| This is designed to be as compact as possible. |
| |
| * `short` |
| |
| commit <hash> |
| Author: <author> |
| |
| <title-line> |
| |
| * `medium` |
| |
| commit <hash> |
| Author: <author> |
| Date: <author-date> |
| |
| <title-line> |
| |
| <full-commit-message> |
| |
| * `full` |
| |
| commit <hash> |
| Author: <author> |
| Commit: <committer> |
| |
| <title-line> |
| |
| <full-commit-message> |
| |
| * `fuller` |
| |
| commit <hash> |
| Author: <author> |
| AuthorDate: <author-date> |
| Commit: <committer> |
| CommitDate: <committer-date> |
| |
| <title-line> |
| |
| <full-commit-message> |
| |
| * `reference` |
| |
| <abbrev-hash> (<title-line>, <short-author-date>) |
| + |
| This format is used to refer to another commit in a commit message and |
| is the same as ++--pretty=\'format:%C(auto)%h (%s, %ad)'++. By default, |
| the date is formatted with `--date=short` unless another `--date` option |
| is explicitly specified. As with any `format:` with format |
| placeholders, its output is not affected by other options like |
| `--decorate` and `--walk-reflogs`. |
| |
| * `email` |
| |
| From <hash> <date> |
| From: <author> |
| Date: <author-date> |
| Subject: [PATCH] <title-line> |
| |
| <full-commit-message> |
| |
| * `mboxrd` |
| + |
| Like `email`, but lines in the commit message starting with "From " |
| (preceded by zero or more ">") are quoted with ">" so they aren't |
| confused as starting a new commit. |
| |
| * `raw` |
| + |
| The `raw` format shows the entire commit exactly as |
| stored in the commit object. Notably, the hashes are |
| displayed in full, regardless of whether `--abbrev` or |
| `--no-abbrev` are used, and 'parents' information show the |
| true parent commits, without taking grafts or history |
| simplification into account. Note that this format affects the way |
| commits are displayed, but not the way the diff is shown e.g. with |
| `git log --raw`. To get full object names in a raw diff format, |
| use `--no-abbrev`. |
| |
| * `format:<format-string>` |
| + |
| The `format:<format-string>` 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: |
| |
| - Placeholders that expand to a single literal character: |
| ++%n++:: newline |
| ++%%++:: a raw ++%++ |
| ++%x00++:: ++%x++ followed by two hexadecimal digits is replaced with a |
| byte with the hexadecimal digits' value (we will call this |
| "literal formatting code" in the rest of this document). |
| |
| - Placeholders that affect formatting of later placeholders: |
| ++%Cred++:: switch color to red |
| ++%Cgreen++:: switch color to green |
| ++%Cblue++:: switch color to blue |
| ++%Creset++:: reset color |
| ++%C(++_<spec>_++)++:: color specification, as described under Values in the |
| "CONFIGURATION FILE" section of linkgit:git-config[1]. By |
| default, colors are shown only when enabled for log output |
| (by `color.diff`, `color.ui`, or `--color`, and respecting |
| the `auto` settings of the former if we are going to a |
| terminal). ++%C(auto,++_<spec>_++)++ is accepted as a historical |
| synonym for the default (e.g., ++%C(auto,red)++). Specifying |
| ++%C(always,++_<spec>_++)++ will show the colors even when color is |
| not otherwise enabled (though consider just using |
| `--color=always` to enable color for the whole output, |
| including this format and anything else git might color). |
| `auto` alone (i.e. ++%C(auto)++) will turn on auto coloring |
| on the next placeholders until the color is switched |
| again. |
| ++%m++:: left (`<`), right (`>`) or boundary (`-`) mark |
| ++%w(++`[<w>[,<i1>[,<i2>]]]`++)++:: switch line wrapping, like the `-w` option of |
| linkgit:git-shortlog[1]. |
| ++%<(++`<n>[,(trunc|ltrunc|mtrunc)]`++)++:: make the next placeholder take at |
| least N column widths, padding spaces on |
| the right if necessary. Optionally |
| truncate (with ellipsis `..`) at the left (ltrunc) `..ft`, |
| the middle (mtrunc) `mi..le`, or the end |
| (trunc) `rig..`, if the output is longer than |
| _<n>_ columns. |
| Note 1: that truncating |
| only works correctly with _<n>_ >= 2. |
| Note 2: spaces around the _<n>_ and _<m>_ (see below) |
| values are optional. |
| Note 3: Emojis and other wide characters |
| will take two display columns, which may |
| over-run column boundaries. |
| Note 4: decomposed character combining marks |
| may be misplaced at padding boundaries. |
| ++%<|(++_<m>_ ++)++:: make the next placeholder take at least until _<m>_ th |
| display column, padding spaces on the right if necessary. |
| Use negative _<m>_ values for column positions measured |
| from the right hand edge of the terminal window. |
| ++%>(++_<n>_++)++:: |
| ++%>|(++_<m>_++)++:: similar to ++%<(++_<n>_++)++, ++%<|(++_<m>_++)++ respectively, |
| but padding spaces on the left |
| ++%>>(++_<n>_++)++:: |
| ++%>>|(++_<m>_++)++:: similar to ++%>(++_<n>_++)++, ++%>|(++_<m>_++)++ |
| respectively, except that if the next |
| placeholder takes more spaces than given and |
| there are spaces on its left, use those |
| spaces |
| ++%><(++_<n>_++)++:: |
| ++%><|(++_<m>_++)++:: similar to ++%<(++_<n>_++)++, ++%<|(++_<m>_++)++ |
| respectively, but padding both sides |
| (i.e. the text is centered) |
| |
| - Placeholders that expand to information extracted from the commit: |
| +%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, see linkgit:git-shortlog[1] |
| or linkgit:git-blame[1]) |
| +%ae+:: author email |
| +%aE+:: author email (respecting .mailmap, see linkgit:git-shortlog[1] |
| or linkgit:git-blame[1]) |
| +%al+:: author email local-part (the part before the `@` sign) |
| +%aL+:: author local-part (see +%al+) respecting .mailmap, see |
| linkgit:git-shortlog[1] or linkgit:git-blame[1]) |
| +%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-like format |
| +%aI+:: author date, strict ISO 8601 format |
| +%as+:: author date, short format (`YYYY-MM-DD`) |
| +%ah+:: author date, human style (like the `--date=human` option of |
| linkgit:git-rev-list[1]) |
| +%cn+:: committer name |
| +%cN+:: committer name (respecting .mailmap, see |
| linkgit:git-shortlog[1] or linkgit:git-blame[1]) |
| +%ce+:: committer email |
| +%cE+:: committer email (respecting .mailmap, see |
| linkgit:git-shortlog[1] or linkgit:git-blame[1]) |
| +%cl+:: committer email local-part (the part before the `@` sign) |
| +%cL+:: committer local-part (see +%cl+) respecting .mailmap, see |
| linkgit:git-shortlog[1] or linkgit:git-blame[1]) |
| +%cd+:: committer date (format respects --date= option) |
| +%cD+:: committer date, RFC2822 style |
| +%cr+:: committer date, relative |
| +%ct+:: committer date, UNIX timestamp |
| +%ci+:: committer date, ISO 8601-like format |
| +%cI+:: committer date, strict ISO 8601 format |
| +%cs+:: committer date, short format (`YYYY-MM-DD`) |
| +%ch+:: committer date, human style (like the `--date=human` option of |
| linkgit:git-rev-list[1]) |
| +%d+:: ref names, like the --decorate option of linkgit:git-log[1] |
| +%D+:: ref names without the " (", ")" wrapping. |
| ++%(decorate++`[:<option>,...]`++)++:: |
| ref names with custom decorations. The `decorate` string may be followed by a |
| colon and zero or more comma-separated options. Option values may contain |
| literal formatting codes. These must be used for commas (`%x2C`) and closing |
| parentheses (`%x29`), due to their role in the option syntax. |
| + |
| ** `prefix=<value>`: Shown before the list of ref names. Defaults to "{nbsp}+(+". |
| ** `suffix=<value>`: Shown after the list of ref names. Defaults to "+)+". |
| ** `separator=<value>`: Shown between ref names. Defaults to "+,+{nbsp}". |
| ** `pointer=<value>`: Shown between HEAD and the branch it points to, if any. |
| Defaults to "{nbsp}+->+{nbsp}". |
| ** `tag=<value>`: Shown before tag names. Defaults to "`tag:`{nbsp}". |
| |
| + |
| For example, to produce decorations with no wrapping |
| or tag annotations, and spaces as separators: |
| + |
| ++%(decorate:prefix=,suffix=,tag=,separator= )++ |
| |
| ++%(describe++`[:<option>,...]`++)++:: |
| human-readable name, like linkgit:git-describe[1]; empty string for |
| undescribable commits. The `describe` string may be followed by a colon and |
| zero or more comma-separated options. Descriptions can be inconsistent when |
| tags are added or removed at the same time. |
| + |
| ** `tags[=<bool-value>]`: Instead of only considering annotated tags, |
| consider lightweight tags as well. |
| ** `abbrev=<number>`: Instead of using the default number of hexadecimal digits |
| (which will vary according to the number of objects in the repository with a |
| default of 7) of the abbreviated object name, use <number> digits, or as many |
| digits as needed to form a unique object name. |
| ** `match=<pattern>`: Only consider tags matching the given |
| `glob(7)` _<pattern>_, excluding the `refs/tags/` prefix. |
| ** `exclude=<pattern>`: Do not consider tags matching the given |
| `glob(7)` _<pattern>_, excluding the `refs/tags/` prefix. |
| |
| +%S+:: ref name given on the command line by which the commit was reached |
| (like `git log --source`), only works with `git log` |
| +%e+:: encoding |
| +%s+:: subject |
| +%f+:: sanitized subject line, suitable for a filename |
| +%b+:: body |
| +%B+:: raw body (unwrapped subject and body) |
| ifndef::git-rev-list[] |
| +%N+:: commit notes |
| endif::git-rev-list[] |
| +%GG+:: raw verification message from GPG for a signed commit |
| +%G?+:: show "G" for a good (valid) signature, |
| "B" for a bad signature, |
| "U" for a good signature with unknown validity, |
| "X" for a good signature that has expired, |
| "Y" for a good signature made by an expired key, |
| "R" for a good signature made by a revoked key, |
| "E" if the signature cannot be checked (e.g. missing key) |
| and "N" for no signature |
| +%GS+:: show the name of the signer for a signed commit |
| +%GK+:: show the key used to sign a signed commit |
| +%GF+:: show the fingerprint of the key used to sign a signed commit |
| +%GP+:: show the fingerprint of the primary key whose subkey was used |
| to sign a signed commit |
| +%GT+:: show the trust level for the key used to sign a signed commit |
| +%gD+:: reflog selector, e.g., `refs/stash@{1}` or `refs/stash@{2 |
| minutes ago}`; the format follows the rules described for the |
| `-g` option. The portion before the `@` is the refname as |
| given on the command line (so `git log -g refs/heads/master` |
| would yield `refs/heads/master@{0}`). |
| +%gd+:: shortened reflog selector; same as `%gD`, but the refname |
| portion is shortened for human readability (so |
| `refs/heads/master` becomes just `master`). |
| +%gn+:: reflog identity name |
| +%gN+:: reflog identity name (respecting .mailmap, see |
| linkgit:git-shortlog[1] or linkgit:git-blame[1]) |
| +%ge+:: reflog identity email |
| +%gE+:: reflog identity email (respecting .mailmap, see |
| linkgit:git-shortlog[1] or linkgit:git-blame[1]) |
| +%gs+:: reflog subject |
| ++%(trailers++`[:<option>,...]`++)++:: |
| display the trailers of the body as interpreted by |
| linkgit:git-interpret-trailers[1]. The `trailers` string may be followed by |
| a colon and zero or more comma-separated options. If any option is provided |
| multiple times, the last occurrence wins. |
| + |
| ** `key=<key>`: only show trailers with specified <key>. Matching is done |
| case-insensitively and trailing colon is optional. If option is |
| given multiple times trailer lines matching any of the keys are |
| shown. This option automatically enables the `only` option so that |
| non-trailer lines in the trailer block are hidden. If that is not |
| desired it can be disabled with `only=false`. E.g., |
| +%(trailers:key=Reviewed-by)+ shows trailer lines with key |
| `Reviewed-by`. |
| ** `only[=<bool>]`: select whether non-trailer lines from the trailer |
| block should be included. |
| ** `separator=<sep>`: specify the separator inserted between trailer |
| lines. Defaults to a line feed character. The string <sep> may contain |
| the literal formatting codes described above. To use comma as |
| separator one must use `%x2C` as it would otherwise be parsed as |
| next option. E.g., +%(trailers:key=Ticket,separator=%x2C )+ |
| shows all trailer lines whose key is "Ticket" separated by a comma |
| and a space. |
| ** `unfold[=<bool>]`: make it behave as if interpret-trailer's `--unfold` |
| option was given. E.g., |
| +%(trailers:only,unfold=true)+ unfolds and shows all trailer lines. |
| ** `keyonly[=<bool>]`: only show the key part of the trailer. |
| ** `valueonly[=<bool>]`: only show the value part of the trailer. |
| ** `key_value_separator=<sep>`: specify the separator inserted between |
| the key and value of each trailer. Defaults to ": ". Otherwise it |
| shares the same semantics as `separator=<sep>` above. |
| |
| NOTE: Some placeholders may depend on other options given to the |
| revision traversal engine. For example, the +%g*+ reflog options will |
| insert an empty string unless we are traversing reflog entries (e.g., by |
| `git log -g`). The +%d+ and +%D+ placeholders will use the "short" |
| decoration format if `--decorate` was not already provided on the command |
| line. |
| |
| The boolean options accept an optional value `[=<bool-value>]`. The |
| values taken by `--type=bool` linkgit:git-config[1], like `yes` and `off`, |
| are all accepted. Giving a boolean option without `=<value>` is |
| equivalent to giving it with `=true`. |
| |
| If you add a `+` (plus sign) after +%+ of a placeholder, a line-feed |
| is inserted immediately before the expansion if and only if the |
| placeholder expands to a non-empty string. |
| |
| If you add a `-` (minus sign) after +%+ of a placeholder, all consecutive |
| line-feeds immediately preceding the expansion are deleted if and only if the |
| placeholder expands to an empty string. |
| |
| If you add a `' '` (space) after +%+ of a placeholder, a space |
| is inserted immediately before the expansion if and only if the |
| placeholder expands to a non-empty string. |
| |
| * `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 |
| --------------------- |
| + |
| In addition, any unrecognized string that has a +%+ in it is interpreted |
| as if it has `tformat:` in front of it. For example, these two are |
| equivalent: |
| + |
| --------------------- |
| $ git log -2 --pretty=tformat:%h 4da45bef |
| $ git log -2 --pretty=%h 4da45bef |
| --------------------- |