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

NAME
----
git-commit - Record your changes

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

DESCRIPTION
-----------
Updates the index file for given paths, or all modified files if
'-a' is specified, and makes a commit object.  The command
VISUAL and EDITOR environment variables to edit the commit log
message.

Several environment variable are used during commits.  They are
documented in gitlink:git-commit-tree[1].


This command can run `commit-msg`, `pre-commit`, and
`post-commit` hooks.  See link:hooks.html[hooks] for more
information.

OPTIONS
-------
-a|--all::
	Update all paths in the index file.  This flag notices
	files that have been modified and deleted, but new files
	you have not told git about are not affected.

-c or -C <commit>::
	Take existing commit object, and reuse the log message
	and the authorship information (including the timestamp)
	when creating the commit.  With '-C', the editor is not
	invoked; with '-c' the user can further edit the commit
	message.

-F <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>::
	Use the given <msg> as the commit message.

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

-v|--verify::
	Look for suspicious lines the commit introduces, and
	abort committing if there is one.  The definition of
	'suspicious lines' is currently the lines that has
	trailing whitespaces, and the lines whose indentation
	has a SP character immediately followed by a TAB
	character.  This is the default.

-n|--no-verify::
	The opposite of `--verify`.

-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::
	Instead of committing only the files specified on the
	command line, update them in the index file and then
	commit the whole index.  This is the traditional
	behaviour.

-o|--only::
	Commit only the files specified on the command line.
	This format cannot be used during a merge, nor when the
	index and the latest commit does not match on the
	specified paths to avoid confusion.

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

<file>...::
	Files to be committed.  The meaning of these is
	different between `--include` and `--only`.  Without
	either, it defaults `--only` semantics.

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


Discussion
----------

`git commit` without _any_ parameter commits the tree structure
recorded by the current index file.  This is a whole-tree commit
even the command is invoked from a subdirectory.

`git commit --include paths...` is equivalent to

	git update-index --remove paths...
	git commit

That is, update the specified paths to the index and then commit
the whole tree.

`git commit paths...` largely bypasses the index file and
commits only the changes made to the specified paths.  It has
however several safety valves to prevent confusion.

. It refuses to run during a merge (i.e. when
  `$GIT_DIR/MERGE_HEAD` exists), and reminds trained git users
  that the traditional semantics now needs -i flag.

. It refuses to run if named `paths...` are different in HEAD
  and the index (ditto about reminding).  Added paths are OK.
  This is because an earlier `git diff` (not `git diff HEAD`)
  would have shown the differences since the last `git
  update-index paths...` to the user, and an inexperienced user
  may mistakenly think that the changes between the index and
  the HEAD (i.e. earlier changes made before the last `git
  update-index paths...` was done) are not being committed.

. It reads HEAD commit into a temporary index file, updates the
  specified `paths...` and makes a commit.  At the same time,
  the real index file is also updated with the same `paths...`.

`git commit --all` updates the index file with _all_ changes to
the working tree, and makes a whole-tree commit, regardless of
which subdirectory the command is invoked in.


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


GIT
---
Part of the gitlink:git[7] suite
