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

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

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

DESCRIPTION
-----------
Stores the current contents of the index in a new commit along
with a log message from the user describing the changes.

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

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

2. by using 'git rm' 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 (which must already
   be known to git);

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 or --patch switches with the 'commit' command
   to decide one by one which files or hunks should be part of the commit,
   before finalizing the operation. See the ``Interactive Mode`` section of
   linkgit:git-add[1] to learn how to operate these modes.

The `--dry-run` option 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 (options and paths).

If you make a commit and then find a mistake immediately after
that, you can recover from it with 'git reset'.


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.

-p::
--patch::
	Use the interactive patch selection interface to chose
	which changes to commit. See linkgit:git-add[1] for
	details.

-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.

--fixup=<commit>::
	Construct a commit message for use with `rebase --autosquash`.
	The commit message will be the subject line from the specified
	commit with a prefix of "fixup! ".  See linkgit:git-rebase[1]
	for details.

--squash=<commit>::
	Construct a commit message for use with `rebase --autosquash`.
	The commit message subject line is taken from the specified
	commit with a prefix of "squash! ".  Can be used with additional
	commit message options (`-m`/`-c`/`-C`/`-F`). See
	linkgit:git-rebase[1] for details.

--reset-author::
	When used with -C/-c/--amend options, or when committing after a
	a conflicting cherry-pick, declare that the authorship of the
	resulting commit now belongs of the committer. This also renews
	the author timestamp.

--short::
	When doing a dry-run, give the output in the short-format. See
	linkgit:git-status[1] for details. Implies `--dry-run`.

--porcelain::
	When doing a dry-run, give the output in a porcelain-ready
	format. See linkgit:git-status[1] for details. Implies
	`--dry-run`.

-z::
	When showing `short` or `porcelain` status output, terminate
	entries in the status output with NUL, instead of LF. If no
	format is given, implies the `--porcelain` output format.

-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 commit author. Specify an explicit author using the
	standard `A U Thor <author@example.com>` format. Otherwise <author>
	is assumed to be a pattern and is used to search for an existing
	commit by that author (i.e. rev-list --all -i --author=<author>);
	the commit author is then copied from the first such commit found.

--date=<date>::
	Override the author date used in the commit.

-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 by the committer at the end of the commit
	log 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.

--allow-empty-message::
       Like --allow-empty this command is primarily for use by foreign
       SCM interface scripts. It allows you to create a commit with an
       empty commit message without using plumbing commands like
       linkgit:git-commit-tree[1].

--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.
--
+
You should understand the implications of rewriting history if you
amend a commit that has already been published.  (See the "RECOVERING
FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].)

-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 to 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.
+
The mode parameter is optional (defaults to 'all'), and is used to
specify the handling of untracked files; when -u is not used, the
default is 'normal', i.e. show untracked files and directories.
+
The possible options are:
+
	- 'no'     - Show no untracked files
	- 'normal' - Shows untracked files and directories
	- 'all'    - Also shows individual files in untracked directories.
+
The default can be changed using the status.showUntrackedFiles
configuration variable documented in linkgit:git-config[1].

-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.

--dry-run::
	Do not create a commit, but show a list of paths that are
	to be committed, paths with local changes that will be left
	uncommitted and paths that are untracked.

--status::
	Include the output of linkgit:git-status[1] in the commit
	message template when using an editor to prepare the commit
	message.  Defaults to on, but can be used to override
	configuration variable commit.status.

--no-status::
	Do not include the output of linkgit:git-status[1] in the
	commit message template when using an editor to prepare the
	default commit 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.

:git-commit: 1
include::date-formats.txt[]

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 'git add'.  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 'git merge' or 'git pull') 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 'git status'
and after fixing them manually in your working tree, you would
stage the result as usual with 'git add':

------------
$ 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).  See linkgit:git-var[1] for details.

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]

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