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