git-commit-tree(1)
==================

NAME
----
git-commit-tree - Create a new commit object


SYNOPSIS
--------
[verse]
'git commit-tree' <tree> [(-p <parent>)...]
'git commit-tree' [(-p <parent>)...] [-S[<keyid>]] [(-m <message>)...]
		  [(-F <file>)...] <tree>


DESCRIPTION
-----------
This is usually not what an end user wants to run directly.  See
linkgit: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.

OPTIONS
-------
<tree>::
	An existing tree object

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

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

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

-S[<keyid>]::
--gpg-sign[=<keyid>]::
	GPG-sign commits. The `keyid` argument is optional and
	defaults to the committer identity; if specified, it must be
	stuck to the option without a space.

--no-gpg-sign::
	Do not GPG-sign commit, to countermand a `--gpg-sign` option
	given earlier on the command line.


Commit Information
------------------

A commit encapsulates:

- all parent object ids
- author name, email and date
- 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:

	GIT_AUTHOR_NAME
	GIT_AUTHOR_EMAIL
	GIT_AUTHOR_DATE
	GIT_COMMITTER_NAME
	GIT_COMMITTER_EMAIL
	GIT_COMMITTER_DATE

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

In case (some of) these environment variables are not set, the information
is taken from the configuration items user.name and user.email, or, if not
present, the environment variable EMAIL, or, if that is not set,
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.

include::date-formats.txt[]

Discussion
----------

include::i18n.txt[]

FILES
-----
/etc/mailname

SEE ALSO
--------
linkgit:git-write-tree[1]

GIT
---
Part of the linkgit:git[1] suite
