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

NAME
----
git-commit - Record changes to the repository

SYNOPSIS
--------
[verse]
'git commit' [-a | --interactive] [-s] [-v] [-u<mode>] [--amend]
	   [(-c | -C) <commit>] [-F <file> | -m <msg>]
	   [--allow-empty] [--no-verify] [-e] [--author=<author>]
	   [--cleanup=<mode>] [--] [[-i | -o ]<file>...]

DESCRIPTION
-----------
Use 'git commit' to store the current contents of the index in a new
commit along with a log message describing the changes you have made.

The content to be added can be specified in several ways:

1. by using linkgit:git-add[1] to incrementally "add" changes to the
   index before using the 'commit' command (Note: even modified
   files must be "added");

2. by using linkgit:git-rm[1] to remove files from the working tree
   and the index, again before using the 'commit' command;

3. by listing files as arguments to the 'commit' command, in which
   case the commit will ignore changes staged in the index, and instead
   record the current content of the listed files;

4. by using the -a switch with the 'commit' command to automatically
   "add" changes from all known files (i.e. all files that are already
   listed in the index) and to automatically "rm" files in the index
   that have been removed from the working tree, and then perform the
   actual commit;

5. by using the --interactive switch with the 'commit' command to decide one
   by one which files should be part of the commit, before finalizing the
   operation.  Currently, this is done by invoking `git-add --interactive`.

The linkgit:git-status[1] command can be used to obtain a
summary of what is included by any of the above for the next
commit by giving the same set of parameters you would give to
this command.

If you make a commit and then found a mistake immediately after
that, you can recover from it with linkgit:git-reset[1].


OPTIONS
-------
-a::
--all::
	Tell the command to automatically stage files that have
	been modified and deleted, but new files you have not
	told git about are not affected.

-C <commit>::
--reuse-message=<commit>::
	Take an existing commit object, and reuse the log message
	and the authorship information (including the timestamp)
	when creating the commit.

-c <commit>::
--reedit-message=<commit>::
	Like '-C', but with '-c' the editor is invoked, so that
	the user can further edit the commit message.

-F <file>::
--file=<file>::
	Take the commit message from the given file.  Use '-' to
	read the message from the standard input.

--author=<author>::
	Override the author name used in the commit.  Use
	`A U Thor <author@example.com>` format.

-m <msg>::
--message=<msg>::
	Use the given <msg> as the commit message.

-t <file>::
--template=<file>::
	Use the contents of the given file as the initial version
	of the commit message. The editor is invoked and you can
	make subsequent changes. If a message is specified using
	the `-m` or `-F` options, this option has no effect. This
	overrides the `commit.template` configuration variable.

-s::
--signoff::
	Add Signed-off-by line at the end of the commit message.

-n::
--no-verify::
	This option bypasses the pre-commit and commit-msg hooks.
	See also linkgit:githooks[5].

--allow-empty::
	Usually recording a commit that has the exact same tree as its
	sole parent commit is a mistake, and the command prevents you
	from making such a commit.  This option bypasses the safety, and
	is primarily for use by foreign scm interface scripts.

--cleanup=<mode>::
	This option sets how the commit message is cleaned up.
	The  '<mode>' can be one of 'verbatim', 'whitespace', 'strip',
	and 'default'. The 'default' mode will strip leading and
	trailing empty lines and #commentary from the commit message
	only if the message is to be edited. Otherwise only whitespace
	removed. The 'verbatim' mode does not change message at all,
	'whitespace' removes just leading/trailing whitespace lines
	and 'strip' removes both whitespace and commentary.

-e::
--edit::
	The message taken from file with `-F`, command line with
	`-m`, and from file with `-C` are usually used as the
	commit log message unmodified.  This option lets you
	further edit the message taken from these sources.

--amend::
	Used to amend the tip of the current branch. Prepare the tree
	object you would want to replace the latest commit as usual
	(this includes the usual -i/-o and explicit paths), and the
	commit log editor is seeded with the commit message from the
	tip of the current branch. The commit you create replaces the
	current tip -- if it was a merge, it will have the parents of
	the current tip as parents -- so the current top commit is
	discarded.
+
--
It is a rough equivalent for:
------
	$ git reset --soft HEAD^
	$ ... do something else to come up with the right tree ...
	$ git commit -c ORIG_HEAD

------
but can be used to amend a merge commit.
--

-i::
--include::
	Before making a commit out of staged contents so far,
	stage the contents of paths given on the command line
	as well.  This is usually not what you want unless you
	are concluding a conflicted merge.

-o::
--only::
	Make a commit only from the paths specified on the
	command line, disregarding any contents that have been
	staged so far. This is the default mode of operation of
	'git commit' if any paths are given on the command line,
	in which case this option can be omitted.
	If this option is specified together with '--amend', then
	no paths need be specified, which can be used to amend
	the last commit without committing changes that have
	already been staged.

-u[<mode>]::
--untracked-files[=<mode>]::
	Show untracked files (Default: 'all').
+
The mode parameter is optional, and is used to specify
the handling of untracked files. The possible options are:
+
--
	- 'no'     - Show no untracked files
	- 'normal' - Shows untracked files and directories
	- 'all'    - Also shows individual files in untracked directories.
--
+
See linkgit:git-config[1] for configuration variable
used to change the default for when the option is not
specified.

-v::
--verbose::
	Show unified diff between the HEAD commit and what
	would be committed at the bottom of the commit message
	template.  Note that this diff output doesn't have its
	lines prefixed with '#'.

-q::
--quiet::
	Suppress commit summary message.

\--::
	Do not interpret any more arguments as options.

<file>...::
	When files are given on the command line, the command
	commits the contents of the named files, without
	recording the changes already staged.  The contents of
	these files are also staged for the next commit on top
	of what have been staged before.


EXAMPLES
--------
When recording your own work, the contents of modified files in
your working tree are temporarily stored to a staging area
called the "index" with linkgit:git-add[1].  A file can be
reverted back, only in the index but not in the working tree,
to that of the last commit with `git reset HEAD -- <file>`,
which effectively reverts `git-add` and prevents the changes to
this file from participating in the next commit.  After building
the state to be committed incrementally with these commands,
`git commit` (without any pathname parameter) is used to record what
has been staged so far.  This is the most basic form of the
command.  An example:

------------
$ edit hello.c
$ git rm goodbye.c
$ git add hello.c
$ git commit
------------

Instead of staging files after each individual change, you can
tell `git commit` to notice the changes to the files whose
contents are tracked in
your working tree and do corresponding `git add` and `git rm`
for you.  That is, this example does the same as the earlier
example if there is no other change in your working tree:

------------
$ edit hello.c
$ rm goodbye.c
$ git commit -a
------------

The command `git commit -a` first looks at your working tree,
notices that you have modified hello.c and removed goodbye.c,
and performs necessary `git add` and `git rm` for you.

After staging changes to many files, you can alter the order the
changes are recorded in, by giving pathnames to `git commit`.
When pathnames are given, the command makes a commit that
only records the changes made to the named paths:

------------
$ edit hello.c hello.h
$ git add hello.c hello.h
$ edit Makefile
$ git commit Makefile
------------

This makes a commit that records the modification to `Makefile`.
The changes staged for `hello.c` and `hello.h` are not included
in the resulting commit.  However, their changes are not lost --
they are still staged and merely held back.  After the above
sequence, if you do:

------------
$ git commit
------------

this second commit would record the changes to `hello.c` and
`hello.h` as expected.

After a merge (initiated by either linkgit:git-merge[1] or
linkgit:git-pull[1]) stops because of conflicts, cleanly merged
paths are already staged to be committed for you, and paths that
conflicted are left in unmerged state.  You would have to first
check which paths are conflicting with linkgit:git-status[1]
and after fixing them manually in your working tree, you would
stage the result as usual with linkgit:git-add[1]:

------------
$ git status | grep unmerged
unmerged: hello.c
$ edit hello.c
$ git add hello.c
------------

After resolving conflicts and staging the result, `git ls-files -u`
would stop mentioning the conflicted path.  When you are done,
run `git commit` to finally record the merge:

------------
$ git commit
------------

As with the case to record your own changes, you can use `-a`
option to save typing.  One difference is that during a merge
resolution, you cannot use `git commit` with pathnames to
alter the order the changes are committed, because the merge
should be recorded as a single commit.  In fact, the command
refuses to run when given pathnames (but see `-i` option).


DISCUSSION
----------

Though not required, it's a good idea to begin the commit message
with a single short (less than 50 character) line summarizing the
change, followed by a blank line and then a more thorough description.
Tools that turn commits into email, for example, use the first line
on the Subject: line and the rest of the commit in the body.

include::i18n.txt[]

ENVIRONMENT AND CONFIGURATION VARIABLES
---------------------------------------
The editor used to edit the commit log message will be chosen from the
GIT_EDITOR environment variable, the core.editor configuration variable, the
VISUAL environment variable, or the EDITOR environment variable (in that
order).

HOOKS
-----
This command can run `commit-msg`, `prepare-commit-msg`, `pre-commit`,
and `post-commit` hooks.  See linkgit:githooks[5] for more
information.


SEE ALSO
--------
linkgit:git-add[1],
linkgit:git-rm[1],
linkgit:git-mv[1],
linkgit:git-merge[1],
linkgit:git-commit-tree[1]

Author
------
Written by Linus Torvalds <torvalds@osdl.org> and
Junio C Hamano <junkio@cox.net>


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