man pages section 1: User Commands

Exit Print View

Updated: July 2014

git-commit-tree (1)


git-commit-tree - Create a new commit object


git commit-tree <tree> [(-p <parent>)...] < changelog
git commit-tree [(-p <parent>)...] [(-m <message>)...] [(-F <file>)...] <tree>


Git Manual                                     GIT-COMMIT-TREE(1)

     git-commit-tree - Create a new commit object

     git commit-tree <tree> [(-p <parent>)...] < changelog
     git commit-tree [(-p <parent>)...] [(-m <message>)...] [(-F <file>)...] <tree>

     This is usually not what an end user wants to run directly.
     See git-commit(1) instead.

     Creates a new commit object based on the provided tree
     object and emits the new commit object id on stdout. The log
     message is read from the standard input, unless -m or -F
     options are given.

     A commit object may have any number of parents. With exactly
     one parent, it is an ordinary commit. Having more than one
     parent makes the commit a merge between several lines of
     history. Initial (root) commits have no parents.

     While a tree represents a particular directory state of a
     working directory, a commit represents that state in "time",
     and explains how to get there.

     Normally a commit would identify a new "HEAD" state, and
     while git doesn't care where you save the note about that
     state, in practice we tend to just write the result to the
     file that is pointed at by .git/HEAD, so that we can always
     see what the last committed state was.

         An existing tree object

     -p <parent>
         Each -p indicates the id of a parent commit object.

     -m <message>
         A paragraph in the commig log message. This can be given
         more than once and each <message> becomes its own

     -F <file>
         Read the commit log message from the given file. Use -
         to read from the standard input.

     A commit encapsulates:

     o   all parent object ids

Git          Last change: 02/22/2012                    1

Git Manual                                     GIT-COMMIT-TREE(1)

     o   author name, email and date

     o   committer name and email and the commit time.

     While parent object ids are provided on the command line,
     author and committer information is taken from the following
     environment variables, if set:


     (nb "<", ">" and "\n"s are stripped)

     In case (some of) these environment variables are not set,
     the information is taken from the configuration items and, or, if not present, system user
     name and the hostname used for outgoing mail (taken from
     /etc/mailname and falling back to the fully qualified
     hostname when that file does not exist).

     A commit comment is read from stdin. If a changelog entry is
     not provided via "<" redirection, git commit-tree will just
     wait for one to be entered and terminated with ^D.

     variables support the following date formats:

     Git internal format
         It is <unix timestamp> <timezone offset>, where <unix
         timestamp> is the number of seconds since the UNIX
         epoch.  <timezone offset> is a positive or negative
         offset from UTC. For example CET (which is 2 hours ahead
         UTC) is +0200.

     RFC 2822
         The standard email format as described by RFC 2822, for
         example Thu, 07 Apr 2005 22:13:13 +0200.

     ISO 8601
         Time and date specified by the ISO 8601 standard, for
         example 2005-04-07T22:13:13. The parser accepts a space
         instead of the T character as well.

             In addition, the date part is accepted in the
             following formats: YYYY.MM.DD, MM/DD/YYYY and

Git          Last change: 02/22/2012                    2

Git Manual                                     GIT-COMMIT-TREE(1)


     You don't exist. Go away!
         The passwd(4) gecos field couldn't be read

     Your parents must have hated you!
         The passwd(4) gecos field is longer than a giant static

     Your sysadmin must hate you!
         The passwd(4) name field is longer than a giant static

     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.

Git          Last change: 02/22/2012                    3

Git Manual                                     GIT-COMMIT-TREE(1)

         Lack of this header implies that the commit log message
         is encoded in UTF-8.

      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.


     See attributes(5) for descriptions of the following

     |Availability   | developer/versioning/git |
     |Stability      | Uncommitted              |

     Part of the git(1) suite

     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                    4