Merge branch 'fc/master' into travis-ci
[git] / Documentation / git-commit.txt
1 git-commit(1)
2 =============
3
4 NAME
5 ----
6 git-commit - Record changes to the repository
7
8 SYNOPSIS
9 --------
10 [verse]
11 'git commit' [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]
12            [--dry-run] [(-c | -C | --fixup | --squash) <commit>]
13            [-F <file> | -m <msg>] [--reset-author] [--allow-empty]
14            [--allow-empty-message] [--no-verify] [-e] [--author=<author>]
15            [--date=<date>] [--cleanup=<mode>] [--[no-]status]
16            [-i | -o] [-S[<keyid>]] [--] [<file>...]
17
18 ALIAS
19 -----
20
21 git ci
22
23 DESCRIPTION
24 -----------
25 Stores the current contents of the index in a new commit along
26 with a log message from the user describing the changes.
27
28 The content to be added can be specified in several ways:
29
30 1. by using 'git add' to incrementally "add" changes to the
31    index before using the 'commit' command (Note: even modified
32    files must be "added");
33
34 2. by using 'git rm' to remove files from the working tree
35    and the index, again before using the 'commit' command;
36
37 3. by listing files as arguments to the 'commit' command, in which
38    case the commit will ignore changes staged in the index, and instead
39    record the current content of the listed files (which must already
40    be known to Git);
41
42 4. by using the -a switch with the 'commit' command to automatically
43    "add" changes from all known files (i.e. all files that are already
44    listed in the index) and to automatically "rm" files in the index
45    that have been removed from the working tree, and then perform the
46    actual commit;
47
48 5. by using the --interactive or --patch switches with the 'commit' command
49    to decide one by one which files or hunks should be part of the commit,
50    before finalizing the operation. See the ``Interactive Mode'' section of
51    linkgit:git-add[1] to learn how to operate these modes.
52
53 The `--dry-run` option can be used to obtain a
54 summary of what is included by any of the above for the next
55 commit by giving the same set of parameters (options and paths).
56
57 If you make a commit and then find a mistake immediately after
58 that, you can recover from it with 'git reset'.
59
60
61 OPTIONS
62 -------
63 -a::
64 --all::
65         Tell the command to automatically stage files that have
66         been modified and deleted, but new files you have not
67         told Git about are not affected.
68
69 -p::
70 --patch::
71         Use the interactive patch selection interface to chose
72         which changes to commit. See linkgit:git-add[1] for
73         details.
74
75 -C <commit>::
76 --reuse-message=<commit>::
77         Take an existing commit object, and reuse the log message
78         and the authorship information (including the timestamp)
79         when creating the commit.
80
81 -c <commit>::
82 --reedit-message=<commit>::
83         Like '-C', but with '-c' the editor is invoked, so that
84         the user can further edit the commit message.
85
86 --fixup=<commit>::
87         Construct a commit message for use with `rebase --autosquash`.
88         The commit message will be the subject line from the specified
89         commit with a prefix of "fixup! ".  See linkgit:git-rebase[1]
90         for details.
91
92 --squash=<commit>::
93         Construct a commit message for use with `rebase --autosquash`.
94         The commit message subject line is taken from the specified
95         commit with a prefix of "squash! ".  Can be used with additional
96         commit message options (`-m`/`-c`/`-C`/`-F`). See
97         linkgit:git-rebase[1] for details.
98
99 --reset-author::
100         When used with -C/-c/--amend options, or when committing after a
101         a conflicting cherry-pick, declare that the authorship of the
102         resulting commit now belongs of the committer. This also renews
103         the author timestamp.
104
105 --short::
106         When doing a dry-run, give the output in the short-format. See
107         linkgit:git-status[1] for details. Implies `--dry-run`.
108
109 --branch::
110         Show the branch and tracking info even in short-format.
111
112 --porcelain::
113         When doing a dry-run, give the output in a porcelain-ready
114         format. See linkgit:git-status[1] for details. Implies
115         `--dry-run`.
116
117 --long::
118         When doing a dry-run, give the output in a the long-format.
119         Implies `--dry-run`.
120
121 -z::
122 --null::
123         When showing `short` or `porcelain` status output, terminate
124         entries in the status output with NUL, instead of LF. If no
125         format is given, implies the `--porcelain` output format.
126
127 -F <file>::
128 --file=<file>::
129         Take the commit message from the given file.  Use '-' to
130         read the message from the standard input.
131
132 --author=<author>::
133         Override the commit author. Specify an explicit author using the
134         standard `A U Thor <author@example.com>` format. Otherwise <author>
135         is assumed to be a pattern and is used to search for an existing
136         commit by that author (i.e. rev-list --all -i --author=<author>);
137         the commit author is then copied from the first such commit found.
138
139 --date=<date>::
140         Override the author date used in the commit.
141
142 -m <msg>::
143 --message=<msg>::
144         Use the given <msg> as the commit message.
145         If multiple `-m` options are given, their values are
146         concatenated as separate paragraphs.
147
148 -t <file>::
149 --template=<file>::
150         When editing the commit message, start the editor with the
151         contents in the given file.  The `commit.template` configuration
152         variable is often used to give this option implicitly to the
153         command.  This mechanism can be used by projects that want to
154         guide participants with some hints on what to write in the message
155         in what order.  If the user exits the editor without editing the
156         message, the commit is aborted.  This has no effect when a message
157         is given by other means, e.g. with the `-m` or `-F` options.
158
159 -s::
160 --signoff::
161         Add Signed-off-by line by the committer at the end of the commit
162         log message.
163
164 -n::
165 --no-verify::
166         This option bypasses the pre-commit and commit-msg hooks.
167         See also linkgit:githooks[5].
168
169 --allow-empty::
170         Usually recording a commit that has the exact same tree as its
171         sole parent commit is a mistake, and the command prevents you
172         from making such a commit.  This option bypasses the safety, and
173         is primarily for use by foreign SCM interface scripts.
174
175 --allow-empty-message::
176        Like --allow-empty this command is primarily for use by foreign
177        SCM interface scripts. It allows you to create a commit with an
178        empty commit message without using plumbing commands like
179        linkgit:git-commit-tree[1].
180
181 --cleanup=<mode>::
182         This option determines how the supplied commit message should be
183         cleaned up before committing.  The '<mode>' can be `strip`,
184         `whitespace`, `verbatim`, or `default`.
185 +
186 --
187 strip::
188         Strip leading and trailing empty lines, trailing whitespace, and
189         #commentary and collapse consecutive empty lines.
190 whitespace::
191         Same as `strip` except #commentary is not removed.
192 verbatim::
193         Do not change the message at all.
194 default::
195         Same as `strip` if the message is to be edited.
196         Otherwise `whitespace`.
197 --
198 +
199 The default can be changed by the 'commit.cleanup' configuration
200 variable (see linkgit:git-config[1]).
201
202 -e::
203 --edit::
204         The message taken from file with `-F`, command line with
205         `-m`, and from commit object with `-C` are usually used as
206         the commit log message unmodified. This option lets you
207         further edit the message taken from these sources.
208
209 --no-edit::
210         Use the selected commit message without launching an editor.
211         For example, `git commit --amend --no-edit` amends a commit
212         without changing its commit message.
213
214 --amend::
215         Replace the tip of the current branch by creating a new
216         commit. The recorded tree is prepared as usual (including
217         the effect of the `-i` and `-o` options and explicit
218         pathspec), and the message from the original commit is used
219         as the starting point, instead of an empty message, when no
220         other message is specified from the command line via options
221         such as `-m`, `-F`, `-c`, etc.  The new commit has the same
222         parents and author as the current one (the `--reset-author`
223         option can countermand this).
224 +
225 --
226 It is a rough equivalent for:
227 ------
228         $ git reset --soft HEAD^
229         $ ... do something else to come up with the right tree ...
230         $ git commit -c ORIG_HEAD
231
232 ------
233 but can be used to amend a merge commit.
234 --
235 +
236 You should understand the implications of rewriting history if you
237 amend a commit that has already been published.  (See the "RECOVERING
238 FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].)
239
240 --no-post-rewrite::
241         Bypass the post-rewrite hook.
242
243 -i::
244 --include::
245         Before making a commit out of staged contents so far,
246         stage the contents of paths given on the command line
247         as well.  This is usually not what you want unless you
248         are concluding a conflicted merge.
249
250 -o::
251 --only::
252         Make a commit only from the paths specified on the
253         command line, disregarding any contents that have been
254         staged so far. This is the default mode of operation of
255         'git commit' if any paths are given on the command line,
256         in which case this option can be omitted.
257         If this option is specified together with '--amend', then
258         no paths need to be specified, which can be used to amend
259         the last commit without committing changes that have
260         already been staged.
261
262 -u[<mode>]::
263 --untracked-files[=<mode>]::
264         Show untracked files.
265 +
266 The mode parameter is optional (defaults to 'all'), and is used to
267 specify the handling of untracked files; when -u is not used, the
268 default is 'normal', i.e. show untracked files and directories.
269 +
270 The possible options are:
271 +
272         - 'no'     - Show no untracked files
273         - 'normal' - Shows untracked files and directories
274         - 'all'    - Also shows individual files in untracked directories.
275 +
276 The default can be changed using the status.showUntrackedFiles
277 configuration variable documented in linkgit:git-config[1].
278
279 -v::
280 --verbose::
281         Show unified diff between the HEAD commit and what
282         would be committed at the bottom of the commit message
283         template.  Note that this diff output doesn't have its
284         lines prefixed with '#'.
285
286 -q::
287 --quiet::
288         Suppress commit summary message.
289
290 --dry-run::
291         Do not create a commit, but show a list of paths that are
292         to be committed, paths with local changes that will be left
293         uncommitted and paths that are untracked.
294
295 --status::
296         Include the output of linkgit:git-status[1] in the commit
297         message template when using an editor to prepare the commit
298         message.  Defaults to on, but can be used to override
299         configuration variable commit.status.
300
301 --no-status::
302         Do not include the output of linkgit:git-status[1] in the
303         commit message template when using an editor to prepare the
304         default commit message.
305
306 -S[<keyid>]::
307 --gpg-sign[=<keyid>]::
308         GPG-sign commit.
309
310 \--::
311         Do not interpret any more arguments as options.
312
313 <file>...::
314         When files are given on the command line, the command
315         commits the contents of the named files, without
316         recording the changes already staged.  The contents of
317         these files are also staged for the next commit on top
318         of what have been staged before.
319
320 :git-commit: 1
321 include::date-formats.txt[]
322
323 EXAMPLES
324 --------
325 When recording your own work, the contents of modified files in
326 your working tree are temporarily stored to a staging area
327 called the "index" with 'git add'.  A file can be
328 reverted back, only in the index but not in the working tree,
329 to that of the last commit with `git reset HEAD -- <file>`,
330 which effectively reverts 'git add' and prevents the changes to
331 this file from participating in the next commit.  After building
332 the state to be committed incrementally with these commands,
333 `git commit` (without any pathname parameter) is used to record what
334 has been staged so far.  This is the most basic form of the
335 command.  An example:
336
337 ------------
338 $ edit hello.c
339 $ git rm goodbye.c
340 $ git add hello.c
341 $ git commit
342 ------------
343
344 Instead of staging files after each individual change, you can
345 tell `git commit` to notice the changes to the files whose
346 contents are tracked in
347 your working tree and do corresponding `git add` and `git rm`
348 for you.  That is, this example does the same as the earlier
349 example if there is no other change in your working tree:
350
351 ------------
352 $ edit hello.c
353 $ rm goodbye.c
354 $ git commit -a
355 ------------
356
357 The command `git commit -a` first looks at your working tree,
358 notices that you have modified hello.c and removed goodbye.c,
359 and performs necessary `git add` and `git rm` for you.
360
361 After staging changes to many files, you can alter the order the
362 changes are recorded in, by giving pathnames to `git commit`.
363 When pathnames are given, the command makes a commit that
364 only records the changes made to the named paths:
365
366 ------------
367 $ edit hello.c hello.h
368 $ git add hello.c hello.h
369 $ edit Makefile
370 $ git commit Makefile
371 ------------
372
373 This makes a commit that records the modification to `Makefile`.
374 The changes staged for `hello.c` and `hello.h` are not included
375 in the resulting commit.  However, their changes are not lost --
376 they are still staged and merely held back.  After the above
377 sequence, if you do:
378
379 ------------
380 $ git commit
381 ------------
382
383 this second commit would record the changes to `hello.c` and
384 `hello.h` as expected.
385
386 After a merge (initiated by 'git merge' or 'git pull') stops
387 because of conflicts, cleanly merged
388 paths are already staged to be committed for you, and paths that
389 conflicted are left in unmerged state.  You would have to first
390 check which paths are conflicting with 'git status'
391 and after fixing them manually in your working tree, you would
392 stage the result as usual with 'git add':
393
394 ------------
395 $ git status | grep unmerged
396 unmerged: hello.c
397 $ edit hello.c
398 $ git add hello.c
399 ------------
400
401 After resolving conflicts and staging the result, `git ls-files -u`
402 would stop mentioning the conflicted path.  When you are done,
403 run `git commit` to finally record the merge:
404
405 ------------
406 $ git commit
407 ------------
408
409 As with the case to record your own changes, you can use `-a`
410 option to save typing.  One difference is that during a merge
411 resolution, you cannot use `git commit` with pathnames to
412 alter the order the changes are committed, because the merge
413 should be recorded as a single commit.  In fact, the command
414 refuses to run when given pathnames (but see `-i` option).
415
416
417 DISCUSSION
418 ----------
419
420 Though not required, it's a good idea to begin the commit message
421 with a single short (less than 50 character) line summarizing the
422 change, followed by a blank line and then a more thorough description.
423 The text up to the first blank line in a commit message is treated
424 as the commit title, and that title is used throughout Git.
425 For example, linkgit:git-format-patch[1] turns a commit into email, and it uses
426 the title on the Subject line and the rest of the commit in the body.
427
428 include::i18n.txt[]
429
430 ENVIRONMENT AND CONFIGURATION VARIABLES
431 ---------------------------------------
432 The editor used to edit the commit log message will be chosen from the
433 GIT_EDITOR environment variable, the core.editor configuration variable, the
434 VISUAL environment variable, or the EDITOR environment variable (in that
435 order).  See linkgit:git-var[1] for details.
436
437 HOOKS
438 -----
439 This command can run `commit-msg`, `prepare-commit-msg`, `pre-commit`,
440 and `post-commit` hooks.  See linkgit:githooks[5] for more
441 information.
442
443 FILES
444 -----
445
446 `$GIT_DIR/COMMIT_EDITMSG`::
447         This file contains the commit message of a commit in progress.
448         If `git commit` exits due to an error before creating a commit,
449         any commit message that has been provided by the user (e.g., in
450         an editor session) will be available in this file, but will be
451         overwritten by the next invocation of `git commit`.
452
453 SEE ALSO
454 --------
455 linkgit:git-add[1],
456 linkgit:git-rm[1],
457 linkgit:git-mv[1],
458 linkgit:git-merge[1],
459 linkgit:git-commit-tree[1]
460
461 GIT
462 ---
463 Part of the linkgit:git[1] suite