]>
Commit | Line | Data |
---|---|---|
215a7ad1 JH |
1 | git-commit(1) |
2 | ============= | |
62033318 JH |
3 | |
4 | NAME | |
5 | ---- | |
c3f0baac | 6 | git-commit - Record changes to the repository |
62033318 JH |
7 | |
8 | SYNOPSIS | |
9 | -------- | |
353ce815 | 10 | [verse] |
3a5d13a3 | 11 | 'git commit' [-a | --interactive] [-s] [-v] [-u<mode>] [--amend] [--dry-run] |
c51f6cee | 12 | [(-c | -C) <commit>] [-F <file> | -m <msg>] [--reset-author] |
c4a7ff52 | 13 | [--allow-empty] [--no-verify] [-e] [--author=<author>] |
5f065737 | 14 | [--cleanup=<mode>] [--] [[-i | -o ]<file>...] |
62033318 JH |
15 | |
16 | DESCRIPTION | |
17 | ----------- | |
d69806d1 JN |
18 | Stores the current contents of the index in a new commit along |
19 | with a log message from the user describing the changes. | |
62033318 | 20 | |
a76c2acb | 21 | The content to be added can be specified in several ways: |
f9935bf9 | 22 | |
ba020ef5 | 23 | 1. by using 'git-add' to incrementally "add" changes to the |
a76c2acb | 24 | index before using the 'commit' command (Note: even modified |
6c96753d | 25 | files must be "added"); |
5bfc4f23 | 26 | |
ba020ef5 | 27 | 2. by using 'git-rm' to remove files from the working tree |
a76c2acb | 28 | and the index, again before using the 'commit' command; |
6c96753d | 29 | |
a76c2acb BF |
30 | 3. by listing files as arguments to the 'commit' command, in which |
31 | case the commit will ignore changes staged in the index, and instead | |
6fc4a7e5 MB |
32 | record the current content of the listed files (which must already |
33 | be known to git); | |
6c96753d | 34 | |
a76c2acb BF |
35 | 4. by using the -a switch with the 'commit' command to automatically |
36 | "add" changes from all known files (i.e. all files that are already | |
37 | listed in the index) and to automatically "rm" files in the index | |
38 | that have been removed from the working tree, and then perform the | |
39 | actual commit; | |
6c96753d | 40 | |
6cbf07ef PB |
41 | 5. by using the --interactive switch with the 'commit' command to decide one |
42 | by one which files should be part of the commit, before finalizing the | |
ba020ef5 | 43 | operation. Currently, this is done by invoking 'git-add --interactive'. |
6cbf07ef | 44 | |
60c2993c | 45 | The `--dry-run` option can be used to obtain a |
6c96753d | 46 | summary of what is included by any of the above for the next |
60c2993c | 47 | commit by giving the same set of parameters (options and paths). |
6c96753d | 48 | |
483bc4f0 | 49 | If you make a commit and then find a mistake immediately after |
ba020ef5 | 50 | that, you can recover from it with 'git-reset'. |
5bfc4f23 | 51 | |
6d35cc76 | 52 | |
62033318 JH |
53 | OPTIONS |
54 | ------- | |
3240240f SB |
55 | -a:: |
56 | --all:: | |
6c96753d JH |
57 | Tell the command to automatically stage files that have |
58 | been modified and deleted, but new files you have not | |
59 | told git about are not affected. | |
62033318 | 60 | |
3240240f SB |
61 | -C <commit>:: |
62 | --reuse-message=<commit>:: | |
bc47c29e | 63 | Take an existing commit object, and reuse the log message |
62033318 | 64 | and the authorship information (including the timestamp) |
bc47c29e | 65 | when creating the commit. |
62033318 | 66 | |
3240240f SB |
67 | -c <commit>:: |
68 | --reedit-message=<commit>:: | |
bc47c29e SB |
69 | Like '-C', but with '-c' the editor is invoked, so that |
70 | the user can further edit the commit message. | |
71 | ||
c51f6cee EM |
72 | --reset-author:: |
73 | When used with -C/-c/--amend options, declare that the | |
74 | authorship of the resulting commit now belongs of the committer. | |
75 | This also renews the author timestamp. | |
76 | ||
3240240f SB |
77 | -F <file>:: |
78 | --file=<file>:: | |
62033318 JH |
79 | Take the commit message from the given file. Use '-' to |
80 | read the message from the standard input. | |
81 | ||
c4a7ff52 | 82 | --author=<author>:: |
146ea068 JH |
83 | Override the author name used in the commit. You can use the |
84 | standard `A U Thor <author@example.com>` format. Otherwise, | |
85 | an existing commit that matches the given string and its author | |
86 | name is used. | |
130fcca6 | 87 | |
3240240f SB |
88 | -m <msg>:: |
89 | --message=<msg>:: | |
62033318 JH |
90 | Use the given <msg> as the commit message. |
91 | ||
3240240f SB |
92 | -t <file>:: |
93 | --template=<file>:: | |
d1cc130a SG |
94 | Use the contents of the given file as the initial version |
95 | of the commit message. The editor is invoked and you can | |
96 | make subsequent changes. If a message is specified using | |
383e45ce BG |
97 | the `-m` or `-F` options, this option has no effect. This |
98 | overrides the `commit.template` configuration variable. | |
d1cc130a | 99 | |
3240240f SB |
100 | -s:: |
101 | --signoff:: | |
a0178ae2 | 102 | Add Signed-off-by line by the committer at the end of the commit |
09cff066 | 103 | log message. |
3f971fc4 | 104 | |
3240240f SB |
105 | -n:: |
106 | --no-verify:: | |
aa6da6cd | 107 | This option bypasses the pre-commit and commit-msg hooks. |
6998e4db | 108 | See also linkgit:githooks[5]. |
eaa54efc | 109 | |
36863af1 JH |
110 | --allow-empty:: |
111 | Usually recording a commit that has the exact same tree as its | |
17ef10d0 JH |
112 | sole parent commit is a mistake, and the command prevents you |
113 | from making such a commit. This option bypasses the safety, and | |
114 | is primarily for use by foreign scm interface scripts. | |
36863af1 | 115 | |
5f065737 AR |
116 | --cleanup=<mode>:: |
117 | This option sets how the commit message is cleaned up. | |
118 | The '<mode>' can be one of 'verbatim', 'whitespace', 'strip', | |
119 | and 'default'. The 'default' mode will strip leading and | |
120 | trailing empty lines and #commentary from the commit message | |
121 | only if the message is to be edited. Otherwise only whitespace | |
122 | removed. The 'verbatim' mode does not change message at all, | |
123 | 'whitespace' removes just leading/trailing whitespace lines | |
124 | and 'strip' removes both whitespace and commentary. | |
125 | ||
3240240f SB |
126 | -e:: |
127 | --edit:: | |
6d35cc76 JH |
128 | The message taken from file with `-F`, command line with |
129 | `-m`, and from file with `-C` are usually used as the | |
130 | commit log message unmodified. This option lets you | |
131 | further edit the message taken from these sources. | |
132 | ||
ae5d8470 | 133 | --amend:: |
ae5d8470 MR |
134 | Used to amend the tip of the current branch. Prepare the tree |
135 | object you would want to replace the latest commit as usual | |
136 | (this includes the usual -i/-o and explicit paths), and the | |
137 | commit log editor is seeded with the commit message from the | |
138 | tip of the current branch. The commit you create replaces the | |
139 | current tip -- if it was a merge, it will have the parents of | |
140 | the current tip as parents -- so the current top commit is | |
141 | discarded. | |
142 | + | |
6cbd5d7d | 143 | -- |
ae5d8470 | 144 | It is a rough equivalent for: |
6cbd5d7d | 145 | ------ |
ae5d8470 MR |
146 | $ git reset --soft HEAD^ |
147 | $ ... do something else to come up with the right tree ... | |
148 | $ git commit -c ORIG_HEAD | |
6cbd5d7d FD |
149 | |
150 | ------ | |
ae5d8470 | 151 | but can be used to amend a merge commit. |
6cbd5d7d | 152 | -- |
97c33c65 TR |
153 | + |
154 | You should understand the implications of rewriting history if you | |
155 | amend a commit that has already been published. (See the "RECOVERING | |
156 | FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].) | |
ae5d8470 | 157 | |
3240240f SB |
158 | -i:: |
159 | --include:: | |
6c96753d JH |
160 | Before making a commit out of staged contents so far, |
161 | stage the contents of paths given on the command line | |
162 | as well. This is usually not what you want unless you | |
163 | are concluding a conflicted merge. | |
62033318 | 164 | |
3240240f SB |
165 | -o:: |
166 | --only:: | |
d4ba07ca JS |
167 | Make a commit only from the paths specified on the |
168 | command line, disregarding any contents that have been | |
169 | staged so far. This is the default mode of operation of | |
467c0197 | 170 | 'git-commit' if any paths are given on the command line, |
d4ba07ca JS |
171 | in which case this option can be omitted. |
172 | If this option is specified together with '--amend', then | |
04c8ce9c | 173 | no paths need to be specified, which can be used to amend |
d4ba07ca JS |
174 | the last commit without committing changes that have |
175 | already been staged. | |
176 | ||
1947bdbc JH |
177 | -u[<mode>]:: |
178 | --untracked-files[=<mode>]:: | |
4bfee30a MSO |
179 | Show untracked files (Default: 'all'). |
180 | + | |
181 | The mode parameter is optional, and is used to specify | |
182 | the handling of untracked files. The possible options are: | |
183 | + | |
184 | -- | |
6c2ce048 | 185 | - 'no' - Show no untracked files |
4bfee30a MSO |
186 | - 'normal' - Shows untracked files and directories |
187 | - 'all' - Also shows individual files in untracked directories. | |
188 | -- | |
d6293d1f MSO |
189 | + |
190 | See linkgit:git-config[1] for configuration variable | |
191 | used to change the default for when the option is not | |
192 | specified. | |
af83bed6 | 193 | |
3240240f SB |
194 | -v:: |
195 | --verbose:: | |
af83bed6 JN |
196 | Show unified diff between the HEAD commit and what |
197 | would be committed at the bottom of the commit message | |
198 | template. Note that this diff output doesn't have its | |
199 | lines prefixed with '#'. | |
200 | ||
3240240f SB |
201 | -q:: |
202 | --quiet:: | |
23bfbb81 | 203 | Suppress commit summary message. |
ebd124c6 | 204 | |
3a5d13a3 JH |
205 | --dry-run:: |
206 | Do not create a commit, but show a list of paths that are | |
207 | to be committed, paths with local changes that will be left | |
208 | uncommitted and paths that are untracked. | |
209 | ||
e994004f | 210 | \--:: |
4170a195 JH |
211 | Do not interpret any more arguments as options. |
212 | ||
213 | <file>...:: | |
6c96753d JH |
214 | When files are given on the command line, the command |
215 | commits the contents of the named files, without | |
216 | recording the changes already staged. The contents of | |
217 | these files are also staged for the next commit on top | |
218 | of what have been staged before. | |
3ae854c3 JH |
219 | |
220 | ||
6c96753d JH |
221 | EXAMPLES |
222 | -------- | |
223 | When recording your own work, the contents of modified files in | |
224 | your working tree are temporarily stored to a staging area | |
ba020ef5 | 225 | called the "index" with 'git-add'. A file can be |
97e9a221 | 226 | reverted back, only in the index but not in the working tree, |
b1889c36 | 227 | to that of the last commit with `git reset HEAD -- <file>`, |
ba020ef5 | 228 | which effectively reverts 'git-add' and prevents the changes to |
97e9a221 JX |
229 | this file from participating in the next commit. After building |
230 | the state to be committed incrementally with these commands, | |
231 | `git commit` (without any pathname parameter) is used to record what | |
6c96753d JH |
232 | has been staged so far. This is the most basic form of the |
233 | command. An example: | |
234 | ||
235 | ------------ | |
236 | $ edit hello.c | |
237 | $ git rm goodbye.c | |
238 | $ git add hello.c | |
239 | $ git commit | |
240 | ------------ | |
241 | ||
6c96753d JH |
242 | Instead of staging files after each individual change, you can |
243 | tell `git commit` to notice the changes to the files whose | |
244 | contents are tracked in | |
245 | your working tree and do corresponding `git add` and `git rm` | |
246 | for you. That is, this example does the same as the earlier | |
247 | example if there is no other change in your working tree: | |
248 | ||
249 | ------------ | |
250 | $ edit hello.c | |
251 | $ rm goodbye.c | |
252 | $ git commit -a | |
253 | ------------ | |
254 | ||
255 | The command `git commit -a` first looks at your working tree, | |
256 | notices that you have modified hello.c and removed goodbye.c, | |
257 | and performs necessary `git add` and `git rm` for you. | |
258 | ||
259 | After staging changes to many files, you can alter the order the | |
260 | changes are recorded in, by giving pathnames to `git commit`. | |
261 | When pathnames are given, the command makes a commit that | |
262 | only records the changes made to the named paths: | |
263 | ||
264 | ------------ | |
265 | $ edit hello.c hello.h | |
266 | $ git add hello.c hello.h | |
267 | $ edit Makefile | |
268 | $ git commit Makefile | |
269 | ------------ | |
270 | ||
271 | This makes a commit that records the modification to `Makefile`. | |
272 | The changes staged for `hello.c` and `hello.h` are not included | |
273 | in the resulting commit. However, their changes are not lost -- | |
274 | they are still staged and merely held back. After the above | |
275 | sequence, if you do: | |
276 | ||
277 | ------------ | |
278 | $ git commit | |
279 | ------------ | |
280 | ||
281 | this second commit would record the changes to `hello.c` and | |
282 | `hello.h` as expected. | |
283 | ||
ba020ef5 | 284 | After a merge (initiated by 'git-merge' or 'git-pull') stops |
483bc4f0 | 285 | because of conflicts, cleanly merged |
6c96753d JH |
286 | paths are already staged to be committed for you, and paths that |
287 | conflicted are left in unmerged state. You would have to first | |
ba020ef5 | 288 | check which paths are conflicting with 'git-status' |
6c96753d | 289 | and after fixing them manually in your working tree, you would |
ba020ef5 | 290 | stage the result as usual with 'git-add': |
6c96753d JH |
291 | |
292 | ------------ | |
293 | $ git status | grep unmerged | |
294 | unmerged: hello.c | |
295 | $ edit hello.c | |
296 | $ git add hello.c | |
297 | ------------ | |
298 | ||
299 | After resolving conflicts and staging the result, `git ls-files -u` | |
300 | would stop mentioning the conflicted path. When you are done, | |
301 | run `git commit` to finally record the merge: | |
302 | ||
303 | ------------ | |
304 | $ git commit | |
305 | ------------ | |
306 | ||
307 | As with the case to record your own changes, you can use `-a` | |
308 | option to save typing. One difference is that during a merge | |
309 | resolution, you cannot use `git commit` with pathnames to | |
310 | alter the order the changes are committed, because the merge | |
311 | should be recorded as a single commit. In fact, the command | |
312 | refuses to run when given pathnames (but see `-i` option). | |
313 | ||
314 | ||
5dc7bcc2 JH |
315 | DISCUSSION |
316 | ---------- | |
317 | ||
936f32d3 JH |
318 | Though not required, it's a good idea to begin the commit message |
319 | with a single short (less than 50 character) line summarizing the | |
320 | change, followed by a blank line and then a more thorough description. | |
321 | Tools that turn commits into email, for example, use the first line | |
322 | on the Subject: line and the rest of the commit in the body. | |
323 | ||
5dc7bcc2 JH |
324 | include::i18n.txt[] |
325 | ||
ef0c2abf AR |
326 | ENVIRONMENT AND CONFIGURATION VARIABLES |
327 | --------------------------------------- | |
328 | The editor used to edit the commit log message will be chosen from the | |
329 | GIT_EDITOR environment variable, the core.editor configuration variable, the | |
330 | VISUAL environment variable, or the EDITOR environment variable (in that | |
b4479f07 | 331 | order). See linkgit:git-var[1] for details. |
6c96753d JH |
332 | |
333 | HOOKS | |
334 | ----- | |
8089c85b | 335 | This command can run `commit-msg`, `prepare-commit-msg`, `pre-commit`, |
6998e4db | 336 | and `post-commit` hooks. See linkgit:githooks[5] for more |
6c96753d | 337 | information. |
130fcca6 | 338 | |
130fcca6 | 339 | |
6c96753d JH |
340 | SEE ALSO |
341 | -------- | |
5162e697 DM |
342 | linkgit:git-add[1], |
343 | linkgit:git-rm[1], | |
344 | linkgit:git-mv[1], | |
345 | linkgit:git-merge[1], | |
346 | linkgit:git-commit-tree[1] | |
130fcca6 | 347 | |
62033318 JH |
348 | Author |
349 | ------ | |
3f971fc4 | 350 | Written by Linus Torvalds <torvalds@osdl.org> and |
59eb68aa | 351 | Junio C Hamano <gitster@pobox.com> |
3f971fc4 | 352 | |
62033318 JH |
353 | |
354 | GIT | |
355 | --- | |
9e1f0a85 | 356 | Part of the linkgit:git[1] suite |