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