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