man pages section 1: User Commands

Exit Print View

Updated: July 2014

git-show (1)


git-show - Show various types of objects


git show [options] <object>...


Git Manual                                            GIT-SHOW(1)

     git-show - Show various types of objects

     git show [options] <object>...

     Shows one or more objects (blobs, trees, tags and commits).

     For commits it shows the log message and textual diff. It
     also presents the merge commit in a special format as
     produced by git diff-tree --cc.

     For tags, it shows the tag message and the referenced

     For trees, it shows the names (equivalent to git ls-tree
     with --name-only).

     For plain blobs, it shows the plain contents.

     The command takes options applicable to the git diff-tree
     command to control how the changes the commit introduces are

     This manual page describes only the most frequently used

         The names of objects to show. For a more complete list
         of ways to spell object names, see "SPECIFYING
         REVISIONS" section in gitrevisions(5).

     --pretty[=<format>], --format=<format>
         Pretty-print the contents of the commit logs in a given
         format, where <format> can be one of oneline, short,
         medium, full, fuller, email, raw and format:<string>.
         See the "PRETTY FORMATS" section for some additional
         details for each format. When omitted, the format
         defaults to medium.

         Note: you can specify the default pretty format in the
         repository configuration (see git-config(1)).

         Instead of showing the full 40-byte hexadecimal commit
         object name, show only a partial prefix. Non default
         number of digits can be specified with "--abbrev=<n>"
         (which also modifies diff output, if it is displayed).

Git          Last change: 02/22/2012                    1

Git Manual                                            GIT-SHOW(1)

         This should make "--pretty=oneline" a whole lot more
         readable for people using 80-column terminals.

         Show the full 40-byte hexadecimal commit object name.
         This negates --abbrev-commit and those options which
         imply it such as "--oneline". It also overrides the
         log.abbrevCommit variable.

         This is a shorthand for "--pretty=oneline
         --abbrev-commit" used together.

         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.

         Show the notes (see git-notes(1)) that annotate the
         commit, when showing the commit log message. This is the
         default for git log, git show and git whatchanged
         commands when there is no --pretty, --format nor
         --oneline option given on the command line.

         By default, the notes shown are from the notes refs
         listed in the core.notesRef and notes.displayRef
         variables (or corresponding environment overrides). See
         git-config(1) for more details.

         With an optional <ref> argument, show this notes ref
         instead of the default notes ref(s). The ref is taken to
         be in refs/notes/ if it is not qualified.

         Multiple --notes options can be combined to control
         which notes are being displayed. Examples: "--notes=foo"
         will show only notes from "refs/notes/foo"; "--notes=foo
         --notes" will show both notes from "refs/notes/foo" and
         from the default notes ref(s).

         Do not show notes. This negates the above --notes
         option, by resetting the list of notes refs from which
         notes are shown. Options are parsed in the order given
         on the command line, so e.g. "--notes --notes=foo
         --no-notes --notes=bar" will only show notes from

     --show-notes[=<ref>], --[no-]standard-notes
         These options are deprecated. Use the above

Git          Last change: 02/22/2012                    2

Git Manual                                            GIT-SHOW(1)

         --notes/--no-notes options instead.

     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.

     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 git-config(1)). Here are the details of
     the built-in formats:

     o    oneline

             <sha1> <title line>

         This is designed to be as compact as possible.

     o    short

             commit <sha1>
             Author: <author>

             <title line>

     o    medium

             commit <sha1>
             Author: <author>
             Date:   <author date>

             <title line>

             <full commit message>

     o    full

             commit <sha1>
             Author: <author>
             Commit: <committer>

             <title line>

             <full commit message>

     o    fuller

Git          Last change: 02/22/2012                    3

Git Manual                                            GIT-SHOW(1)

             commit <sha1>
             Author:     <author>
             AuthorDate: <author date>
             Commit:     <committer>
             CommitDate: <committer date>

             <title line>

             <full commit message>

     o    email

             From <sha1> <date>
             From: <author>
             Date: <author date>
             Subject: [PATCH] <title line>

             <full commit message>

     o    raw

         The raw format shows the entire commit exactly as stored
         in the commit object. Notably, the SHA1s are displayed
         in full, regardless of whether --abbrev or --no-abbrev
         are used, and parents information show the true parent
         commits, without taking grafts nor history
         simplification into account.

     o    format:<string>

         The 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:

         o    %H: commit hash

         o    %h: abbreviated commit hash

         o    %T: tree hash

         o    %t: abbreviated tree hash

         o    %P: parent hashes

Git          Last change: 02/22/2012                    4

Git Manual                                            GIT-SHOW(1)

         o    %p: abbreviated parent hashes

         o    %an: author name

         o    %aN: author name (respecting .mailmap, see git-
             shortlog(1) or git-blame(1))

         o    %ae: author email

         o    %aE: author email (respecting .mailmap, see git-
             shortlog(1) or git-blame(1))

         o    %ad: author date (format respects --date= option)

         o    %aD: author date, RFC2822 style

         o    %ar: author date, relative

         o    %at: author date, UNIX timestamp

         o    %ai: author date, ISO 8601 format

         o    %cn: committer name

         o    %cN: committer name (respecting .mailmap, see git-
             shortlog(1) or git-blame(1))

         o    %ce: committer email

         o    %cE: committer email (respecting .mailmap, see git-
             shortlog(1) or git-blame(1))

         o    %cd: committer date

         o    %cD: committer date, RFC2822 style

         o    %cr: committer date, relative

         o    %ct: committer date, UNIX timestamp

         o    %ci: committer date, ISO 8601 format

         o    %d: ref names, like the --decorate option of git-

         o    %e: encoding

         o    %s: subject

         o    %f: sanitized subject line, suitable for a filename

         o    %b: body

Git          Last change: 02/22/2012                    5

Git Manual                                            GIT-SHOW(1)

         o    %B: raw body (unwrapped subject and body)

         o    %N: commit notes

         o    %gD: reflog selector, e.g., refs/stash@{1}

         o    %gd: shortened reflog selector, e.g., stash@{1}

         o    %gn: reflog identity name

         o    %gN: reflog identity name (respecting .mailmap, see
             git-shortlog(1) or git-blame(1))

         o    %ge: reflog identity email

         o    %gE: reflog identity email (respecting .mailmap,
             see git-shortlog(1) or git-blame(1))

         o    %gs: reflog subject

         o    %Cred: switch color to red

         o    %Cgreen: switch color to green

         o    %Cblue: switch color to blue

         o    %Creset: reset color

         o    %C(...): color specification, as described in
             color.branch.* config option

         o    %m: left, right or boundary mark

         o    %n: newline

         o    %%: a raw %

         o    %x00: print a byte from a hex code

         o    %w([<w>[,<i1>[,<i2>]]]): switch line wrapping, like
             the -w option of git-shortlog(1).


         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
         placeholder will use the "short" decoration format if
         --decorate was not already provided on the command line.

     If you add a + (plus sign) after % of a placeholder, a

Git          Last change: 02/22/2012                    6

Git Manual                                            GIT-SHOW(1)

     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,
     line-feeds that immediately precede the expansion are
     deleted if and only if the placeholder expands to an empty

     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.

     o    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

             $ git log -2 --pretty=format:%h 4da45bef \
               | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
             7134973 -- NO NEWLINE

             $ git log -2 --pretty=tformat:%h 4da45bef \
               | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'

         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

     git show v1.0.0
         Shows the tag v1.0.0, along with the object the tags
         points at.

     git show v1.0.0^{tree}
         Shows the tree pointed to by the tag v1.0.0.

     git show -s --format=%s v1.0.0^{commit}
         Shows the subject of the commit pointed to by the tag

Git          Last change: 02/22/2012                    7

Git Manual                                            GIT-SHOW(1)


     git show next~10:Documentation/README
         Shows the contents of the file Documentation/README as
         they were current in the 10th last commit of the branch

     git show master:Makefile master:t/Makefile
         Concatenates the contents of said Makefiles in the head
         of the branch master.

     At the core level, git is character encoding agnostic.

     o   The pathnames recorded in the index and in the tree
         objects are treated as uninterpreted sequences of
         non-NUL bytes. What readdir(2) returns are what are
         recorded and compared with the data git keeps track of,
         which in turn are expected to be what lstat(2) and
         creat(2) accepts. There is no such thing as pathname
         encoding translation.

     o   The contents of the blob objects are uninterpreted
         sequences of bytes. There is no encoding translation at
         the core level.

     o   The commit log messages are uninterpreted sequences of
         non-NUL bytes.

     Although we encourage that the commit log messages are
     encoded in UTF-8, both the core and git Porcelain are
     designed not to force UTF-8 on projects. If all participants
     of a particular project find it more convenient to use
     legacy encodings, git does not forbid it. However, there are
     a few things to keep in mind.

      1.  git commit and git commit-tree issues a warning if the
         commit log message given to it does not look like a
         valid UTF-8 string, unless you explicitly say your
         project uses a legacy encoding. The way to say this is
         to have i18n.commitencoding in .git/config file, like

                     commitencoding = ISO-8859-1

         Commit objects created with the above setting record the
         value of i18n.commitencoding in its encoding header.
         This is to help other people who look at them later.
         Lack of this header implies that the commit log message
         is encoded in UTF-8.

Git          Last change: 02/22/2012                    8

Git Manual                                            GIT-SHOW(1)

      2.  git log, git show, git blame and friends look at the
         encoding header of a commit object, and try to re-code
         the log message into UTF-8 unless otherwise specified.
         You can specify the desired output encoding with
         i18n.logoutputencoding in .git/config file, like this:

                     logoutputencoding = ISO-8859-1

         If you do not have this configuration variable, the
         value of i18n.commitencoding is used instead.

     Note that we deliberately chose not to re-code the commit
     log message when a commit is made to force UTF-8 at the
     commit object level, because re-coding to UTF-8 is not
     necessarily a reversible operation.

     Part of the git(1) suite

     See attributes(5) for descriptions of the following

     |Availability   | developer/versioning/git |
     |Stability      | Uncommitted              |
     This software was built from source available at  The original
     community source was downloaded from  http://git-

     Further information about this software can be found on the
     open source community website at

Git          Last change: 02/22/2012                    9