blob: 2e62165fa9f48e1bff506b75895c081eb922b4ec [file] [log] [blame]
Junio C Hamano1a4e8412005-12-27 08:17:231git-commit(1)
2=============
3
4NAME
5----
Junio C Hamano7c73c662007-01-19 00:37:506git-commit - Record changes to the repository
Junio C Hamano1a4e8412005-12-27 08:17:237
8SYNOPSIS
9--------
Junio C Hamano235a91e2006-01-07 01:13:5810[verse]
Junio C Hamanofce7c7e2008-07-02 03:06:3811'git commit' [-a | --interactive] [-s] [-v] [-u<mode>] [--amend]
Junio C Hamanoeb415992008-06-08 22:49:4712 [(-c | -C) <commit>] [-F <file> | -m <msg>]
13 [--allow-empty] [--no-verify] [-e] [--author=<author>]
Junio C Hamano554da792007-12-27 03:29:5814 [--cleanup=<mode>] [--] [[-i | -o ]<file>...]
Junio C Hamano1a4e8412005-12-27 08:17:2315
16DESCRIPTION
17-----------
Junio C Hamanoba4b9282008-07-06 05:20:3118Stores the current contents of the index in a new commit along
19with a log message from the user describing the changes.
Junio C Hamano1a4e8412005-12-27 08:17:2320
Junio C Hamanobd2b4bb2007-08-06 06:42:2421The content to be added can be specified in several ways:
Junio C Hamanob515b6a2007-08-08 09:21:1622
Junio C Hamanoba4b9282008-07-06 05:20:31231. by using 'git-add' to incrementally "add" changes to the
Junio C Hamanobd2b4bb2007-08-06 06:42:2424 index before using the 'commit' command (Note: even modified
Junio C Hamanoe7935c42006-12-13 21:32:1725 files must be "added");
Junio C Hamano2b135272006-03-18 07:45:4226
Junio C Hamanoba4b9282008-07-06 05:20:31272. by using 'git-rm' to remove files from the working tree
Junio C Hamanobd2b4bb2007-08-06 06:42:2428 and the index, again before using the 'commit' command;
Junio C Hamano2b135272006-03-18 07:45:4229
Junio C Hamanobd2b4bb2007-08-06 06:42:24303. by listing files as arguments to the 'commit' command, in which
31 case the commit will ignore changes staged in the index, and instead
32 record the current content of the listed files;
Junio C Hamanoe7935c42006-12-13 21:32:1733
Junio C Hamanobd2b4bb2007-08-06 06:42:24344. by using the -a switch with the 'commit' command to automatically
35 "add" changes from all known files (i.e. all files that are already
36 listed in the index) and to automatically "rm" files in the index
37 that have been removed from the working tree, and then perform the
38 actual commit;
Junio C Hamanoe7935c42006-12-13 21:32:1739
Junio C Hamanoc51fede2007-03-12 07:29:20405. by using the --interactive switch with the 'commit' command to decide one
41 by one which files should be part of the commit, before finalizing the
Junio C Hamanoba4b9282008-07-06 05:20:3142 operation. Currently, this is done by invoking 'git-add --interactive'.
Junio C Hamanoc51fede2007-03-12 07:29:2043
Junio C Hamanoba4b9282008-07-06 05:20:3144The 'git-status' command can be used to obtain a
Junio C Hamanoe7935c42006-12-13 21:32:1745summary of what is included by any of the above for the next
46commit by giving the same set of parameters you would give to
47this command.
48
Junio C Hamanofce7c7e2008-07-02 03:06:3849If you make a commit and then find a mistake immediately after
Junio C Hamanoba4b9282008-07-06 05:20:3150that, you can recover from it with 'git-reset'.
Junio C Hamanoe7935c42006-12-13 21:32:1751
Junio C Hamano1a4e8412005-12-27 08:17:2352
53OPTIONS
54-------
Junio C Hamanoeb415992008-06-08 22:49:4755-a::
56--all::
Junio C Hamanoe7935c42006-12-13 21:32:1757Tell the command to automatically stage files that have
58been modified and deleted, but new files you have not
59told git about are not affected.
Junio C Hamano1a4e8412005-12-27 08:17:2360
Junio C Hamanoeb415992008-06-08 22:49:4761-C <commit>::
62--reuse-message=<commit>::
63Take an existing commit object, and reuse the log message
Junio C Hamano1a4e8412005-12-27 08:17:2364and the authorship information (including the timestamp)
Junio C Hamanoeb415992008-06-08 22:49:4765when creating the commit.
66
67-c <commit>::
68--reedit-message=<commit>::
69Like '-C', but with '-c' the editor is invoked, so that
70the user can further edit the commit message.
Junio C Hamano1a4e8412005-12-27 08:17:2371
72-F <file>::
Junio C Hamanoeb415992008-06-08 22:49:4773--file=<file>::
Junio C Hamano1a4e8412005-12-27 08:17:2374Take the commit message from the given file. Use '-' to
75read the message from the standard input.
76
Junio C Hamanoeb415992008-06-08 22:49:4777--author=<author>::
Junio C Hamanoa2f46622008-09-03 05:20:3178Override the author name used in the commit. You can use the
79standard `A U Thor <author@example.com>` format. Otherwise,
80an existing commit that matches the given string and its author
81name is used.
Junio C Hamano40f2f8d2006-02-07 08:04:3982
Junio C Hamanoeb415992008-06-08 22:49:4783-m <msg>::
84--message=<msg>::
Junio C Hamano1a4e8412005-12-27 08:17:2385Use the given <msg> as the commit message.
86
Junio C Hamanoeb415992008-06-08 22:49:4787-t <file>::
88--template=<file>::
Junio C Hamanoa3770f92007-07-25 08:53:3389Use the contents of the given file as the initial version
90of the commit message. The editor is invoked and you can
91make subsequent changes. If a message is specified using
Junio C Hamanob968dbb2007-07-27 07:26:4092the `-m` or `-F` options, this option has no effect. This
93overrides the `commit.template` configuration variable.
Junio C Hamanoa3770f92007-07-25 08:53:3394
Junio C Hamanoeb415992008-06-08 22:49:4795-s::
96--signoff::
Junio C Hamano7d06a8a2008-10-20 05:42:3397Add Signed-off-by line by the commiter at the end of the commit
98log message.
Junio C Hamano1a4e8412005-12-27 08:17:2399
Junio C Hamanoeb415992008-06-08 22:49:47100-n::
Junio C Hamanoe7935c42006-12-13 21:32:17101--no-verify::
Junio C Hamano942b35e2007-12-09 10:19:33102This option bypasses the pre-commit and commit-msg hooks.
Junio C Hamanofce7c7e2008-07-02 03:06:38103See also linkgit:githooks[5].
Junio C Hamano1a4e8412005-12-27 08:17:23104
Junio C Hamano0c999702007-12-03 09:57:55105--allow-empty::
106Usually recording a commit that has the exact same tree as its
Junio C Hamano58256872007-12-04 08:31:13107sole parent commit is a mistake, and the command prevents you
108from making such a commit. This option bypasses the safety, and
109is primarily for use by foreign scm interface scripts.
Junio C Hamano0c999702007-12-03 09:57:55110
Junio C Hamano554da792007-12-27 03:29:58111--cleanup=<mode>::
112This option sets how the commit message is cleaned up.
113The '<mode>' can be one of 'verbatim', 'whitespace', 'strip',
114and 'default'. The 'default' mode will strip leading and
115trailing empty lines and #commentary from the commit message
116only if the message is to be edited. Otherwise only whitespace
117removed. The 'verbatim' mode does not change message at all,
118'whitespace' removes just leading/trailing whitespace lines
119and 'strip' removes both whitespace and commentary.
120
Junio C Hamanoeb415992008-06-08 22:49:47121-e::
122--edit::
Junio C Hamano1a4e8412005-12-27 08:17:23123The message taken from file with `-F`, command line with
124`-m`, and from file with `-C` are usually used as the
125commit log message unmodified. This option lets you
126further edit the message taken from these sources.
127
Junio C Hamanobfe9e752006-04-05 21:43:28128--amend::
Junio C Hamanobfe9e752006-04-05 21:43:28129Used to amend the tip of the current branch. Prepare the tree
130object you would want to replace the latest commit as usual
131(this includes the usual -i/-o and explicit paths), and the
132commit log editor is seeded with the commit message from the
133tip of the current branch. The commit you create replaces the
134current tip -- if it was a merge, it will have the parents of
135the current tip as parents -- so the current top commit is
136discarded.
137+
Junio C Hamano47ea30e2006-04-05 23:08:03138--
Junio C Hamanobfe9e752006-04-05 21:43:28139It is a rough equivalent for:
Junio C Hamano47ea30e2006-04-05 23:08:03140------
Junio C Hamanobfe9e752006-04-05 21:43:28141$ git reset --soft HEAD^
142$ ... do something else to come up with the right tree ...
143$ git commit -c ORIG_HEAD
Junio C Hamano47ea30e2006-04-05 23:08:03144
145------
Junio C Hamanobfe9e752006-04-05 21:43:28146but can be used to amend a merge commit.
Junio C Hamano47ea30e2006-04-05 23:08:03147--
Junio C Hamano7d06a8a2008-10-20 05:42:33148+
149You should understand the implications of rewriting history if you
150amend a commit that has already been published. (See the "RECOVERING
151FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].)
Junio C Hamanobfe9e752006-04-05 21:43:28152
Junio C Hamanoeb415992008-06-08 22:49:47153-i::
154--include::
Junio C Hamanoe7935c42006-12-13 21:32:17155Before making a commit out of staged contents so far,
156stage the contents of paths given on the command line
157as well. This is usually not what you want unless you
158are concluding a conflicted merge.
Junio C Hamano1a4e8412005-12-27 08:17:23159
Junio C Hamanoeb415992008-06-08 22:49:47160-o::
161--only::
Junio C Hamanoe79159d2008-04-12 08:23:17162Make a commit only from the paths specified on the
163command line, disregarding any contents that have been
164staged so far. This is the default mode of operation of
Junio C Hamanoba4b9282008-07-06 05:20:31165'git-commit' if any paths are given on the command line,
Junio C Hamanoe79159d2008-04-12 08:23:17166in which case this option can be omitted.
167If this option is specified together with '--amend', then
168no paths need be specified, which can be used to amend
169the last commit without committing changes that have
170already been staged.
171
Junio C Hamano4224f992008-06-23 07:14:08172-u[<mode>]::
173--untracked-files[=<mode>]::
174Show untracked files (Default: 'all').
175+
176The mode parameter is optional, and is used to specify
177the handling of untracked files. The possible options are:
178+
179--
180- 'no' - Show no untracked files
181- 'normal' - Shows untracked files and directories
182- 'all' - Also shows individual files in untracked directories.
183--
184+
185See linkgit:git-config[1] for configuration variable
186used to change the default for when the option is not
187specified.
Junio C Hamano1e6e0062007-07-13 05:33:25188
Junio C Hamanoeb415992008-06-08 22:49:47189-v::
190--verbose::
Junio C Hamano1e6e0062007-07-13 05:33:25191Show unified diff between the HEAD commit and what
192would be committed at the bottom of the commit message
193template. Note that this diff output doesn't have its
194lines prefixed with '#'.
195
Junio C Hamanoeb415992008-06-08 22:49:47196-q::
197--quiet::
Junio C Hamanof9771f62007-01-17 17:42:30198Suppress commit summary message.
Junio C Hamano7d23f5e2006-12-16 07:44:04199
Junio C Hamano1bb569e2006-05-05 23:14:25200\--::
Junio C Hamano6697ac52006-02-14 08:00:23201Do not interpret any more arguments as options.
202
203<file>...::
Junio C Hamanoe7935c42006-12-13 21:32:17204When files are given on the command line, the command
205commits the contents of the named files, without
206recording the changes already staged. The contents of
207these files are also staged for the next commit on top
208of what have been staged before.
Junio C Hamano1a4e8412005-12-27 08:17:23209
210
Junio C Hamanoe7935c42006-12-13 21:32:17211EXAMPLES
212--------
213When recording your own work, the contents of modified files in
214your working tree are temporarily stored to a staging area
Junio C Hamanoba4b9282008-07-06 05:20:31215called the "index" with 'git-add'. A file can be
Junio C Hamano361c1332007-11-14 12:17:22216reverted back, only in the index but not in the working tree,
Junio C Hamanofce7c7e2008-07-02 03:06:38217to that of the last commit with `git reset HEAD -- <file>`,
Junio C Hamanoba4b9282008-07-06 05:20:31218which effectively reverts 'git-add' and prevents the changes to
Junio C Hamano361c1332007-11-14 12:17:22219this file from participating in the next commit. After building
220the state to be committed incrementally with these commands,
221`git commit` (without any pathname parameter) is used to record what
Junio C Hamanoe7935c42006-12-13 21:32:17222has been staged so far. This is the most basic form of the
223command. An example:
Junio C Hamano40f2f8d2006-02-07 08:04:39224
Junio C Hamanoe7935c42006-12-13 21:32:17225------------
226$ edit hello.c
227$ git rm goodbye.c
228$ git add hello.c
229$ git commit
230------------
Junio C Hamano40f2f8d2006-02-07 08:04:39231
Junio C Hamanoe7935c42006-12-13 21:32:17232Instead of staging files after each individual change, you can
233tell `git commit` to notice the changes to the files whose
234contents are tracked in
235your working tree and do corresponding `git add` and `git rm`
236for you. That is, this example does the same as the earlier
237example if there is no other change in your working tree:
Junio C Hamano40f2f8d2006-02-07 08:04:39238
Junio C Hamanoe7935c42006-12-13 21:32:17239------------
240$ edit hello.c
241$ rm goodbye.c
242$ git commit -a
243------------
Junio C Hamano40f2f8d2006-02-07 08:04:39244
Junio C Hamanoe7935c42006-12-13 21:32:17245The command `git commit -a` first looks at your working tree,
246notices that you have modified hello.c and removed goodbye.c,
247and performs necessary `git add` and `git rm` for you.
Junio C Hamano40f2f8d2006-02-07 08:04:39248
Junio C Hamanoe7935c42006-12-13 21:32:17249After staging changes to many files, you can alter the order the
250changes are recorded in, by giving pathnames to `git commit`.
251When pathnames are given, the command makes a commit that
252only records the changes made to the named paths:
Junio C Hamano40f2f8d2006-02-07 08:04:39253
Junio C Hamanoe7935c42006-12-13 21:32:17254------------
255$ edit hello.c hello.h
256$ git add hello.c hello.h
257$ edit Makefile
258$ git commit Makefile
259------------
Junio C Hamano40f2f8d2006-02-07 08:04:39260
Junio C Hamanoe7935c42006-12-13 21:32:17261This makes a commit that records the modification to `Makefile`.
262The changes staged for `hello.c` and `hello.h` are not included
263in the resulting commit. However, their changes are not lost --
264they are still staged and merely held back. After the above
265sequence, if you do:
Junio C Hamano40f2f8d2006-02-07 08:04:39266
Junio C Hamanoe7935c42006-12-13 21:32:17267------------
268$ git commit
269------------
Junio C Hamano40f2f8d2006-02-07 08:04:39270
Junio C Hamanoe7935c42006-12-13 21:32:17271this second commit would record the changes to `hello.c` and
272`hello.h` as expected.
273
Junio C Hamanoba4b9282008-07-06 05:20:31274After a merge (initiated by 'git-merge' or 'git-pull') stops
Junio C Hamanofce7c7e2008-07-02 03:06:38275because of conflicts, cleanly merged
Junio C Hamanoe7935c42006-12-13 21:32:17276paths are already staged to be committed for you, and paths that
277conflicted are left in unmerged state. You would have to first
Junio C Hamanoba4b9282008-07-06 05:20:31278check which paths are conflicting with 'git-status'
Junio C Hamanoe7935c42006-12-13 21:32:17279and after fixing them manually in your working tree, you would
Junio C Hamanoba4b9282008-07-06 05:20:31280stage the result as usual with 'git-add':
Junio C Hamanoe7935c42006-12-13 21:32:17281
282------------
283$ git status | grep unmerged
284unmerged: hello.c
285$ edit hello.c
286$ git add hello.c
287------------
288
289After resolving conflicts and staging the result, `git ls-files -u`
290would stop mentioning the conflicted path. When you are done,
291run `git commit` to finally record the merge:
292
293------------
294$ git commit
295------------
296
297As with the case to record your own changes, you can use `-a`
298option to save typing. One difference is that during a merge
299resolution, you cannot use `git commit` with pathnames to
300alter the order the changes are committed, because the merge
301should be recorded as a single commit. In fact, the command
302refuses to run when given pathnames (but see `-i` option).
303
304
Junio C Hamano775a0f42006-12-31 01:19:14305DISCUSSION
306----------
307
Junio C Hamano8f76dc62007-01-17 07:24:25308Though not required, it's a good idea to begin the commit message
309with a single short (less than 50 character) line summarizing the
310change, followed by a blank line and then a more thorough description.
311Tools that turn commits into email, for example, use the first line
312on the Subject: line and the rest of the commit in the body.
313
Junio C Hamano775a0f42006-12-31 01:19:14314include::i18n.txt[]
315
Junio C Hamanof6002a92007-07-20 10:28:22316ENVIRONMENT AND CONFIGURATION VARIABLES
317---------------------------------------
318The editor used to edit the commit log message will be chosen from the
319GIT_EDITOR environment variable, the core.editor configuration variable, the
320VISUAL environment variable, or the EDITOR environment variable (in that
321order).
Junio C Hamanoe7935c42006-12-13 21:32:17322
323HOOKS
324-----
Junio C Hamano26e590a2008-02-17 03:53:51325This command can run `commit-msg`, `prepare-commit-msg`, `pre-commit`,
Junio C Hamanofce7c7e2008-07-02 03:06:38326and `post-commit` hooks. See linkgit:githooks[5] for more
Junio C Hamanoe7935c42006-12-13 21:32:17327information.
328
329
330SEE ALSO
331--------
Junio C Hamano35738e82008-01-07 07:55:46332linkgit:git-add[1],
333linkgit:git-rm[1],
334linkgit:git-mv[1],
335linkgit:git-merge[1],
336linkgit:git-commit-tree[1]
Junio C Hamano40f2f8d2006-02-07 08:04:39337
Junio C Hamano1a4e8412005-12-27 08:17:23338Author
339------
340Written by Linus Torvalds <torvalds@osdl.org> and
Junio C Hamano0868a302008-07-22 09:20:44341Junio C Hamano <gitster@pobox.com>
Junio C Hamano1a4e8412005-12-27 08:17:23342
343
344GIT
345---
Junio C Hamanof7c042d2008-06-06 22:50:53346Part of the linkgit:git[1] suite