]>
Commit | Line | Data |
---|---|---|
215a7ad1 JH |
1 | git-add(1) |
2 | ========== | |
7fc9d69f JH |
3 | |
4 | NAME | |
5 | ---- | |
5f42ac92 | 6 | git-add - Add file contents to the index |
7fc9d69f JH |
7 | |
8 | SYNOPSIS | |
9 | -------- | |
480611d1 | 10 | [verse] |
b1889c36 | 11 | 'git add' [-n] [-v] [--force | -f] [--interactive | -i] [--patch | -p] |
8776f5d3 JK |
12 | [--all | [--update | -u]] [--intent-to-add | -N] |
13 | [--refresh] [--ignore-errors] [--] <filepattern>... | |
7fc9d69f JH |
14 | |
15 | DESCRIPTION | |
16 | ----------- | |
5f42ac92 BF |
17 | This command adds the current content of new or modified files to the |
18 | index, thus staging that content for inclusion in the next commit. | |
19 | ||
20 | The "index" holds a snapshot of the content of the working tree, and it | |
21 | is this snapshot that is taken as the contents of the next commit. Thus | |
22 | after making any changes to the working directory, and before running | |
23 | the commit command, you must use the 'add' command to add any new or | |
24 | modified files to the index. | |
25 | ||
26 | This command can be performed multiple times before a commit. It only | |
27 | adds the content of the specified file(s) at the time the add command is | |
28 | run; if you want subsequent changes included in the next commit, then | |
29 | you must run 'git add' again to add the new content to the index. | |
30 | ||
31 | The 'git status' command can be used to obtain a summary of which | |
32 | files have changes that are staged for the next commit. | |
33 | ||
d1d028ea BD |
34 | The 'git add' command will not add ignored files by default. If any |
35 | ignored files were explicitly specified on the command line, 'git add' | |
36 | will fail with a list of ignored files. Ignored files reached by | |
9d5fc59d PB |
37 | directory recursion or filename globbing performed by Git (quote your |
38 | globs before the shell) will be silently ignored. The 'add' command can | |
39 | be used to add ignored files with the `-f` (force) option. | |
7fc9d69f | 40 | |
5162e697 | 41 | Please see linkgit:git-commit[1] for alternative ways to add content to a |
366bfcb6 NP |
42 | commit. |
43 | ||
44 | ||
7fc9d69f JH |
45 | OPTIONS |
46 | ------- | |
480611d1 | 47 | <filepattern>...:: |
e23ca9e1 JH |
48 | Files to add content from. Fileglobs (e.g. `*.c`) can |
49 | be given to add all matching files. Also a | |
50 | leading directory name (e.g. `dir` to add `dir/file1` | |
51 | and `dir/file2`) can be given to add all files in the | |
52 | directory, recursively. | |
7fc9d69f | 53 | |
3240240f SB |
54 | -n:: |
55 | --dry-run:: | |
918db541 CS |
56 | Don't actually add the file(s), just show if they exist. |
57 | ||
3240240f SB |
58 | -v:: |
59 | --verbose:: | |
918db541 CS |
60 | Be verbose. |
61 | ||
6a1ad325 | 62 | -f:: |
69c61c4f | 63 | --force:: |
6a1ad325 JH |
64 | Allow adding otherwise ignored files. |
65 | ||
3240240f SB |
66 | -i:: |
67 | --interactive:: | |
6a5ad23d | 68 | Add modified contents in the working tree interactively to |
b63e9950 WC |
69 | the index. Optional path arguments may be supplied to limit |
70 | operation to a subset of the working tree. See ``Interactive | |
71 | mode'' for details. | |
72 | ||
3240240f SB |
73 | -p:: |
74 | --patch:: | |
b63e9950 WC |
75 | Similar to Interactive mode but the initial command loop is |
76 | bypassed and the 'patch' subcommand is invoked using each of | |
77 | the specified filepatterns before exiting. | |
6a5ad23d | 78 | |
bc3561f3 | 79 | -u:: |
69c61c4f | 80 | --update:: |
afd899e1 JK |
81 | Update only files that git already knows about, staging modified |
82 | content for commit and marking deleted files for removal. This | |
83 | is similar | |
dfaa61bd JK |
84 | to what "git commit -a" does in preparation for making a commit, |
85 | except that the update is limited to paths specified on the | |
0ca15e72 PK |
86 | command line. If no paths are specified, all tracked files in the |
87 | current directory and its subdirectories are updated. | |
bc3561f3 | 88 | |
da98053a JH |
89 | -A:: |
90 | --all:: | |
91 | Update files that git already knows about (same as '\--update') | |
92 | and add all untracked files that are not ignored by '.gitignore' | |
93 | mechanism. | |
94 | ||
8776f5d3 JK |
95 | |
96 | -N:: | |
97 | --intent-to-add:: | |
98 | Record only the fact that the path will be added later. An entry | |
99 | for the path is placed in the index with no content. This is | |
100 | useful for, among other things, showing the unstaged content of | |
76bac890 | 101 | such files with 'git diff' and committing them with 'git commit |
8776f5d3 JK |
102 | -a'. |
103 | ||
3240240f | 104 | --refresh:: |
d616813d AJ |
105 | Don't add the file(s), but only refresh their stat() |
106 | information in the index. | |
107 | ||
3240240f | 108 | --ignore-errors:: |
984b83ef AR |
109 | If some files could not be added because of errors indexing |
110 | them, do not abort the operation, but continue adding the | |
111 | others. The command shall still exit with non-zero status. | |
112 | ||
e994004f | 113 | \--:: |
60ace879 CW |
114 | This option can be used to separate command-line options from |
115 | the list of files, (useful when filenames might be mistaken | |
116 | for command-line options). | |
117 | ||
918db541 | 118 | |
164b1989 MH |
119 | Configuration |
120 | ------------- | |
121 | ||
122 | The optional configuration variable 'core.excludesfile' indicates a path to a | |
123 | file containing patterns of file names to exclude from git-add, similar to | |
124 | $GIT_DIR/info/exclude. Patterns in the exclude file are used in addition to | |
6998e4db | 125 | those in info/exclude. See linkgit:gitrepository-layout[5]. |
164b1989 MH |
126 | |
127 | ||
810bf1f9 JH |
128 | EXAMPLES |
129 | -------- | |
810bf1f9 | 130 | |
921177f5 CC |
131 | * Adds content from all `\*.txt` files under `Documentation` directory |
132 | and its subdirectories: | |
133 | + | |
134 | ------------ | |
135 | $ git add Documentation/\\*.txt | |
136 | ------------ | |
810bf1f9 JH |
137 | + |
138 | Note that the asterisk `\*` is quoted from the shell in this | |
139 | example; this lets the command to include the files from | |
140 | subdirectories of `Documentation/` directory. | |
141 | ||
921177f5 CC |
142 | * Considers adding content from all git-*.sh scripts: |
143 | + | |
144 | ------------ | |
145 | $ git add git-*.sh | |
146 | ------------ | |
147 | + | |
148 | Because this example lets shell expand the asterisk (i.e. you are | |
149 | listing the files explicitly), it does not consider | |
150 | `subdir/git-foo.sh`. | |
810bf1f9 | 151 | |
6a5ad23d JH |
152 | Interactive mode |
153 | ---------------- | |
154 | When the command enters the interactive mode, it shows the | |
23bfbb81 | 155 | output of the 'status' subcommand, and then goes into its |
6a5ad23d JH |
156 | interactive command loop. |
157 | ||
158 | The command loop shows the list of subcommands available, and | |
159 | gives a prompt "What now> ". In general, when the prompt ends | |
160 | with a single '>', you can pick only one of the choices given | |
161 | and type return, like this: | |
162 | ||
163 | ------------ | |
164 | *** Commands *** | |
165 | 1: status 2: update 3: revert 4: add untracked | |
166 | 5: patch 6: diff 7: quit 8: help | |
167 | What now> 1 | |
168 | ------------ | |
169 | ||
170 | You also could say "s" or "sta" or "status" above as long as the | |
171 | choice is unique. | |
172 | ||
173 | The main command loop has 6 subcommands (plus help and quit). | |
174 | ||
175 | status:: | |
176 | ||
177 | This shows the change between HEAD and index (i.e. what will be | |
178 | committed if you say "git commit"), and between index and | |
179 | working tree files (i.e. what you could stage further before | |
180 | "git commit" using "git-add") for each path. A sample output | |
181 | looks like this: | |
182 | + | |
183 | ------------ | |
184 | staged unstaged path | |
185 | 1: binary nothing foo.png | |
186 | 2: +403/-35 +1/-1 git-add--interactive.perl | |
187 | ------------ | |
188 | + | |
189 | It shows that foo.png has differences from HEAD (but that is | |
190 | binary so line count cannot be shown) and there is no | |
191 | difference between indexed copy and the working tree | |
192 | version (if the working tree version were also different, | |
193 | 'binary' would have been shown in place of 'nothing'). The | |
194 | other file, git-add--interactive.perl, has 403 lines added | |
195 | and 35 lines deleted if you commit what is in the index, but | |
196 | working tree file has further modifications (one addition and | |
197 | one deletion). | |
198 | ||
199 | update:: | |
200 | ||
201 | This shows the status information and gives prompt | |
202 | "Update>>". When the prompt ends with double '>>', you can | |
203 | make more than one selection, concatenated with whitespace or | |
204 | comma. Also you can say ranges. E.g. "2-5 7,9" to choose | |
1e5aaa6d CM |
205 | 2,3,4,5,7,9 from the list. If the second number in a range is |
206 | omitted, all remaining patches are taken. E.g. "7-" to choose | |
207 | 7,8,9 from the list. You can say '*' to choose everything. | |
6a5ad23d JH |
208 | + |
209 | What you chose are then highlighted with '*', | |
210 | like this: | |
211 | + | |
212 | ------------ | |
213 | staged unstaged path | |
214 | 1: binary nothing foo.png | |
215 | * 2: +403/-35 +1/-1 git-add--interactive.perl | |
216 | ------------ | |
217 | + | |
218 | To remove selection, prefix the input with `-` | |
219 | like this: | |
220 | + | |
221 | ------------ | |
222 | Update>> -2 | |
223 | ------------ | |
224 | + | |
225 | After making the selection, answer with an empty line to stage the | |
226 | contents of working tree files for selected paths in the index. | |
227 | ||
228 | revert:: | |
229 | ||
230 | This has a very similar UI to 'update', and the staged | |
231 | information for selected paths are reverted to that of the | |
232 | HEAD version. Reverting new paths makes them untracked. | |
233 | ||
234 | add untracked:: | |
235 | ||
236 | This has a very similar UI to 'update' and | |
237 | 'revert', and lets you add untracked paths to the index. | |
238 | ||
239 | patch:: | |
240 | ||
241 | This lets you choose one path out of 'status' like selection. | |
242 | After choosing the path, it presents diff between the index | |
243 | and the working tree file and asks you if you want to stage | |
244 | the change of each hunk. You can say: | |
245 | ||
bb12ac51 VK |
246 | y - stage this hunk |
247 | n - do not stage this hunk | |
248 | a - stage this and all the remaining hunks in the file | |
249 | d - do not stage this hunk nor any of the remaining hunks in the file | |
250 | j - leave this hunk undecided, see next undecided hunk | |
251 | J - leave this hunk undecided, see next hunk | |
252 | k - leave this hunk undecided, see previous undecided hunk | |
253 | K - leave this hunk undecided, see previous hunk | |
280e50c7 | 254 | s - split the current hunk into smaller hunks |
ac083c47 | 255 | e - manually edit the current hunk |
280e50c7 | 256 | ? - print help |
6a5ad23d JH |
257 | + |
258 | After deciding the fate for all hunks, if there is any hunk | |
259 | that was chosen, the index is updated with the selected hunks. | |
260 | ||
261 | diff:: | |
262 | ||
263 | This lets you review what will be committed (i.e. between | |
264 | HEAD and index). | |
265 | ||
cfc4ba33 TL |
266 | Bugs |
267 | ---- | |
268 | The interactive mode does not work with files whose names contain | |
269 | characters that need C-quoting. `core.quotepath` configuration can be | |
270 | used to work this limitation around to some degree, but backslash, | |
271 | double-quote and control characters will still have problems. | |
6a5ad23d | 272 | |
56ae8df5 | 273 | SEE ALSO |
872d001f | 274 | -------- |
5162e697 DM |
275 | linkgit:git-status[1] |
276 | linkgit:git-rm[1] | |
277 | linkgit:git-reset[1] | |
278 | linkgit:git-mv[1] | |
279 | linkgit:git-commit[1] | |
280 | linkgit:git-update-index[1] | |
810bf1f9 | 281 | |
7fc9d69f JH |
282 | Author |
283 | ------ | |
284 | Written by Linus Torvalds <torvalds@osdl.org> | |
285 | ||
286 | Documentation | |
287 | -------------- | |
288 | Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>. | |
289 | ||
290 | GIT | |
291 | --- | |
9e1f0a85 | 292 | Part of the linkgit:git[1] suite |