1git-commit(1) 2============= 3 4NAME 5---- 6git-commit - Record changes to the repository 7 8SYNOPSIS 9-------- 10[verse] 11'git-commit' [-a | --interactive] [-s] [-v] [-u] 12 [(-c | -C) <commit> | -F <file> | -m <msg> | --amend] 13 [--no-verify] [-e] [--author <author>] 14 [--] [[-i | -o ]<file>...] 15 16DESCRIPTION 17----------- 18Use 'git commit' when you want to record your changes into the repository 19along with a log message describing what the commit is about. All changes 20to be committed must be explicitly identified using one of the following 21methods: 22 231. by using gitlink:git-add[1] to incrementally "add" changes to the 24 next commit before using the 'commit' command (Note: even modified 25 files must be "added"); 26 272. by using gitlink:git-rm[1] to identify content removal for the next 28 commit, again before using the 'commit' command; 29 303. by directly listing files containing changes to be committed as arguments 31 to the 'commit' command, in which cases only those files alone will be 32 considered for the commit; 33 344. by using the -a switch with the 'commit' command to automatically "add" 35 changes from all known files i.e. files that have already been committed 36 before, and to automatically "rm" files that have been 37 removed from the working tree, and perform the actual commit. 38 395. by using the --interactive switch with the 'commit' command to decide one 40 by one which files should be part of the commit, before finalizing the 41 operation. Currently, this is done by invoking `git-add --interactive`. 42 43The gitlink:git-status[1] command can be used to obtain a 44summary of what is included by any of the above for the next 45commit by giving the same set of parameters you would give to 46this command. 47 48If you make a commit and then found a mistake immediately after 49that, you can recover from it with gitlink:git-reset[1]. 50 51 52OPTIONS 53------- 54-a|--all:: 55 Tell the command to automatically stage files that have 56 been modified and deleted, but new files you have not 57 told git about are not affected. 58 59-c or -C <commit>:: 60 Take existing commit object, and reuse the log message 61 and the authorship information (including the timestamp) 62 when creating the commit. With '-C', the editor is not 63 invoked; with '-c' the user can further edit the commit 64 message. 65 66-F <file>:: 67 Take the commit message from the given file. Use '-' to 68 read the message from the standard input. 69 70--author <author>:: 71 Override the author name used in the commit. Use 72 `A U Thor <author@example.com>` format. 73 74-m <msg>|--message=<msg>:: 75 Use the given <msg> as the commit message. 76 77-t <file>|--template=<file>:: 78 Use the contents of the given file as the initial version 79 of the commit message. The editor is invoked and you can 80 make subsequent changes. If a message is specified using 81 the `-m` or `-F` options, this option has no effect. This 82 overrides the `commit.template` configuration variable. 83 84-s|--signoff:: 85 Add Signed-off-by line at the end of the commit message. 86 87--no-verify:: 88 This option bypasses the pre-commit hook. 89 See also link:hooks.html[hooks]. 90 91-e|--edit:: 92 The message taken from file with `-F`, command line with 93 `-m`, and from file with `-C` are usually used as the 94 commit log message unmodified. This option lets you 95 further edit the message taken from these sources. 96 97--amend:: 98 99 Used to amend the tip of the current branch. Prepare the tree 100 object you would want to replace the latest commit as usual 101 (this includes the usual -i/-o and explicit paths), and the 102 commit log editor is seeded with the commit message from the 103 tip of the current branch. The commit you create replaces the 104 current tip -- if it was a merge, it will have the parents of 105 the current tip as parents -- so the current top commit is 106 discarded. 107+ 108-- 109It is a rough equivalent for: 110------ 111 $ git reset --soft HEAD^ 112 $ ... do something else to come up with the right tree ... 113 $ git commit -c ORIG_HEAD 114 115------ 116but can be used to amend a merge commit. 117-- 118 119-i|--include:: 120 Before making a commit out of staged contents so far, 121 stage the contents of paths given on the command line 122 as well. This is usually not what you want unless you 123 are concluding a conflicted merge. 124 125-u|--untracked-files:: 126 Show all untracked files, also those in uninteresting 127 directories, in the "Untracked files:" section of commit 128 message template. Without this option only its name and 129 a trailing slash are displayed for each untracked 130 directory. 131 132-v|--verbose:: 133 Show unified diff between the HEAD commit and what 134 would be committed at the bottom of the commit message 135 template. Note that this diff output doesn't have its 136 lines prefixed with '#'. 137 138-q|--quiet:: 139 Suppress commit summary message. 140 141\--:: 142 Do not interpret any more arguments as options. 143 144<file>...:: 145 When files are given on the command line, the command 146 commits the contents of the named files, without 147 recording the changes already staged. The contents of 148 these files are also staged for the next commit on top 149 of what have been staged before. 150 151 152EXAMPLES 153-------- 154When recording your own work, the contents of modified files in 155your working tree are temporarily stored to a staging area 156called the "index" with gitlink:git-add[1]. Removal 157of a file is staged with gitlink:git-rm[1]. After building the 158state to be committed incrementally with these commands, `git 159commit` (without any pathname parameter) is used to record what 160has been staged so far. This is the most basic form of the 161command. An example: 162 163------------ 164$ edit hello.c 165$ git rm goodbye.c 166$ git add hello.c 167$ git commit 168------------ 169 170Instead of staging files after each individual change, you can 171tell `git commit` to notice the changes to the files whose 172contents are tracked in 173your working tree and do corresponding `git add` and `git rm` 174for you. That is, this example does the same as the earlier 175example if there is no other change in your working tree: 176 177------------ 178$ edit hello.c 179$ rm goodbye.c 180$ git commit -a 181------------ 182 183The command `git commit -a` first looks at your working tree, 184notices that you have modified hello.c and removed goodbye.c, 185and performs necessary `git add` and `git rm` for you. 186 187After staging changes to many files, you can alter the order the 188changes are recorded in, by giving pathnames to `git commit`. 189When pathnames are given, the command makes a commit that 190only records the changes made to the named paths: 191 192------------ 193$ edit hello.c hello.h 194$ git add hello.c hello.h 195$ edit Makefile 196$ git commit Makefile 197------------ 198 199This makes a commit that records the modification to `Makefile`. 200The changes staged for `hello.c` and `hello.h` are not included 201in the resulting commit. However, their changes are not lost -- 202they are still staged and merely held back. After the above 203sequence, if you do: 204 205------------ 206$ git commit 207------------ 208 209this second commit would record the changes to `hello.c` and 210`hello.h` as expected. 211 212After a merge (initiated by either gitlink:git-merge[1] or 213gitlink:git-pull[1]) stops because of conflicts, cleanly merged 214paths are already staged to be committed for you, and paths that 215conflicted are left in unmerged state. You would have to first 216check which paths are conflicting with gitlink:git-status[1] 217and after fixing them manually in your working tree, you would 218stage the result as usual with gitlink:git-add[1]: 219 220------------ 221$ git status | grep unmerged 222unmerged: hello.c 223$ edit hello.c 224$ git add hello.c 225------------ 226 227After resolving conflicts and staging the result, `git ls-files -u` 228would stop mentioning the conflicted path. When you are done, 229run `git commit` to finally record the merge: 230 231------------ 232$ git commit 233------------ 234 235As with the case to record your own changes, you can use `-a` 236option to save typing. One difference is that during a merge 237resolution, you cannot use `git commit` with pathnames to 238alter the order the changes are committed, because the merge 239should be recorded as a single commit. In fact, the command 240refuses to run when given pathnames (but see `-i` option). 241 242 243DISCUSSION 244---------- 245 246Though not required, it's a good idea to begin the commit message 247with a single short (less than 50 character) line summarizing the 248change, followed by a blank line and then a more thorough description. 249Tools that turn commits into email, for example, use the first line 250on the Subject: line and the rest of the commit in the body. 251 252include::i18n.txt[] 253 254ENVIRONMENT AND CONFIGURATION VARIABLES 255--------------------------------------- 256The editor used to edit the commit log message will be chosen from the 257GIT_EDITOR environment variable, the core.editor configuration variable, the 258VISUAL environment variable, or the EDITOR environment variable (in that 259order). 260 261HOOKS 262----- 263This command can run `commit-msg`, `pre-commit`, and 264`post-commit` hooks. See link:hooks.html[hooks] for more 265information. 266 267 268SEE ALSO 269-------- 270gitlink:git-add[1], 271gitlink:git-rm[1], 272gitlink:git-mv[1], 273gitlink:git-merge[1], 274gitlink:git-commit-tree[1] 275 276Author 277------ 278Written by Linus Torvalds <torvalds@osdl.org> and 279Junio C Hamano <junkio@cox.net> 280 281 282GIT 283--- 284Part of the gitlink:git[7] suite