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 | --squash) <commit> | --fixup [(amend|reword):]<commit>)]
	   [-F <file> | -m <msg>] [--reset-author] [--allow-empty]
	   [--allow-empty-message] [--no-verify] [-e] [--author=<author>]
	   [--date=<date>] [--cleanup=<mode>] [--[no-]status]
	   [-i | -o] [--pathspec-from-file=<file> [--pathspec-file-nul]]
	   [(--trailer <token>[(=|:)<value>])...] [-S[<keyid>]]
	   [--] [<pathspec>...]

DESCRIPTION
-----------
Create a new commit containing the current contents of the index and
the given log message describing the changes. The new commit is a
direct child of HEAD, usually the tip of the current branch, and the
branch is updated to point to it (unless no branch is associated with
the working tree, in which case HEAD is "detached" as described in
linkgit:git-checkout[1]).

The content to be committed 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
   (without --interactive or --patch switch), 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
   in addition to contents in the index,
   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'.

:git-commit: 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.

-p::
--patch::
	Use the interactive patch selection interface to choose
	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=[(amend|reword):]<commit>::
	Create a new commit which "fixes up" `<commit>` when applied with
	`git rebase --autosquash`. Plain `--fixup=<commit>` creates a
	"fixup!" commit which changes the content of `<commit>` but leaves
	its log message untouched. `--fixup=amend:<commit>` is similar but
	creates an "amend!" commit which also replaces the log message of
	`<commit>` with the log message of the "amend!" commit.
	`--fixup=reword:<commit>` creates an "amend!" commit which
	replaces the log message of `<commit>` with its own log message
	but makes no changes to the content of `<commit>`.
+
The commit created by plain `--fixup=<commit>` has a subject
composed of "fixup!" followed by the subject line from <commit>,
and is recognized specially by `git rebase --autosquash`. The `-m`
option may be used to supplement the log message of the created
commit, but the additional commentary will be thrown away once the
"fixup!" commit is squashed into `<commit>` by
`git rebase --autosquash`.
+
The commit created by `--fixup=amend:<commit>` is similar but its
subject is instead prefixed with "amend!". The log message of
<commit> is copied into the log message of the "amend!" commit and
opened in an editor so it can be refined. When `git rebase
--autosquash` squashes the "amend!" commit into `<commit>`, the
log message of `<commit>` is replaced by the refined log message
from the "amend!" commit. It is an error for the "amend!" commit's
log message to be empty unless `--allow-empty-message` is
specified.
+
`--fixup=reword:<commit>` is shorthand for `--fixup=amend:<commit>
--only`. It creates an "amend!" commit with only a log message
(ignoring any changes staged in the index). When squashed by `git
rebase --autosquash`, it replaces the log message of `<commit>`
without making any other changes.
+
Neither "fixup!" nor "amend!" commits change authorship of
`<commit>` when applied by `git rebase --autosquash`.
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
	conflicting cherry-pick, declare that the authorship of the
	resulting commit now belongs to 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`.

--branch::
	Show the branch and tracking info even in short-format.

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

--long::
	When doing a dry-run, give the output in the long-format.
	Implies `--dry-run`.

-z::
--null::
	When showing `short` or `porcelain` status output, print the
	filename verbatim and terminate the entries with NUL, instead of LF.
	If no format is given, implies the `--porcelain` output format.
	Without the `-z` option, filenames with "unusual" characters are
	quoted as explained for the configuration variable `core.quotePath`
	(see linkgit:git-config[1]).

-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.
	If multiple `-m` options are given, their values are
	concatenated as separate paragraphs.
+
The `-m` option is mutually exclusive with `-c`, `-C`, and `-F`.

-t <file>::
--template=<file>::
	When editing the commit message, start the editor with the
	contents in the given file.  The `commit.template` configuration
	variable is often used to give this option implicitly to the
	command.  This mechanism can be used by projects that want to
	guide participants with some hints on what to write in the message
	in what order.  If the user exits the editor without editing the
	message, the commit is aborted.  This has no effect when a message
	is given by other means, e.g. with the `-m` or `-F` options.

include::signoff-option.txt[]

--trailer <token>[(=|:)<value>]::
	Specify a (<token>, <value>) pair that should be applied as a
	trailer. (e.g. `git commit --trailer "Signed-off-by:C O Mitter \
	<committer@example.com>" --trailer "Helped-by:C O Mitter \
	<committer@example.com>"` will add the "Signed-off-by" trailer
	and the "Helped-by" trailer to the commit message.)
	The `trailer.*` configuration variables
	(linkgit:git-interpret-trailers[1]) can be used to define if
	a duplicated trailer is omitted, where in the run of trailers
	each trailer would appear, and other details.

-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 determines how the supplied commit message should be
	cleaned up before committing.  The '<mode>' can be `strip`,
	`whitespace`, `verbatim`, `scissors` or `default`.
+
--
strip::
	Strip leading and trailing empty lines, trailing whitespace,
	commentary and collapse consecutive empty lines.
whitespace::
	Same as `strip` except #commentary is not removed.
verbatim::
	Do not change the message at all.
scissors::
	Same as `whitespace` except that everything from (and including)
	the line found below is truncated, if the message is to be edited.
	"`#`" can be customized with core.commentChar.

		# ------------------------ >8 ------------------------

default::
	Same as `strip` if the message is to be edited.
	Otherwise `whitespace`.
--
+
The default can be changed by the `commit.cleanup` configuration
variable (see linkgit:git-config[1]).

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

--no-edit::
	Use the selected commit message without launching an editor.
	For example, `git commit --amend --no-edit` amends a commit
	without changing its commit message.

--amend::
	Replace the tip of the current branch by creating a new
	commit. The recorded tree is prepared as usual (including
	the effect of the `-i` and `-o` options and explicit
	pathspec), and the message from the original commit is used
	as the starting point, instead of an empty message, when no
	other message is specified from the command line via options
	such as `-m`, `-F`, `-c`, etc.  The new commit has the same
	parents and author as the current one (the `--reset-author`
	option can countermand this).
+
--
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].)

--no-post-rewrite::
	Bypass the post-rewrite hook.

-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 by taking the updated working tree contents
	of the paths specified on the
	command line, disregarding any contents that have been
	staged for other paths. 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. If used together with `--allow-empty`
	paths are also not required, and an empty commit will be created.

--pathspec-from-file=<file>::
	Pathspec is passed in `<file>` instead of commandline args. If
	`<file>` is exactly `-` then standard input is used. Pathspec
	elements are separated by LF or CR/LF. Pathspec elements can be
	quoted as explained for the configuration variable `core.quotePath`
	(see linkgit:git-config[1]). See also `--pathspec-file-nul` and
	global `--literal-pathspecs`.

--pathspec-file-nul::
	Only meaningful with `--pathspec-from-file`. Pathspec elements are
	separated with NUL character and all other characters are taken
	literally (including newlines and quotes).

-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 to help the user describe the commit by reminding
	what changes the commit has.
	Note that this diff output doesn't have its
	lines prefixed with '#'. This diff will not be a part
	of the commit message. See the `commit.verbose` configuration
	variable in linkgit:git-config[1].
+
If specified twice, show in addition the unified diff between
what would be committed and the worktree files, i.e. the unstaged
changes to tracked files.

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

-S[<keyid>]::
--gpg-sign[=<keyid>]::
--no-gpg-sign::
	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` is useful to
	countermand both `commit.gpgSign` configuration variable, and
	earlier `--gpg-sign`.

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

<pathspec>...::
	When pathspec is given on the command line, commit the contents of
	the files that match the pathspec without recording the changes
	already added to the index. The contents of these files are also
	staged for the next commit on top of what have been staged before.
+
For more details, see the 'pathspec' entry in linkgit:gitglossary[7].

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 restore --staged <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).

COMMIT INFORMATION
------------------

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)

The author and committer names are by convention some form of a personal name
(that is, the name by which other humans refer to you), although Git does not
enforce or require any particular form. Arbitrary Unicode may be used, subject
to the constraints listed above. This name has no effect on authentication; for
that, see the `credential.username` variable in linkgit:git-config[1].

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

The `author.name` and `committer.name` and their corresponding email options
override `user.name` and `user.email` if set and are overridden themselves by
the environment variables.

The typical usage is to set just the `user.name` and `user.email` variables;
the other options are provided for more complex use cases.

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

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.
The text up to the first blank line in a commit message is treated
as the commit title, and that title is used throughout Git.
For example, linkgit:git-format-patch[1] turns a commit into email, and it uses
the title 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`,
`post-commit` and `post-rewrite` hooks.  See linkgit:githooks[5] for more
information.

FILES
-----

`$GIT_DIR/COMMIT_EDITMSG`::
	This file contains the commit message of a commit in progress.
	If `git commit` exits due to an error before creating a commit,
	any commit message that has been provided by the user (e.g., in
	an editor session) will be available in this file, but will be
	overwritten by the next invocation of `git commit`.

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
