1git-add(1) 2========== 3 4NAME 5---- 6git-add - Add file contents to the index 7 8SYNOPSIS 9-------- 10'git-add' [-n] [-v] [-f] [--interactive | -i] [-u] [--] <file>... 11 12DESCRIPTION 13----------- 14This command adds the current content of new or modified files to the 15index, thus staging that content for inclusion in the next commit. 16 17The "index" holds a snapshot of the content of the working tree, and it 18is this snapshot that is taken as the contents of the next commit. Thus 19after making any changes to the working directory, and before running 20the commit command, you must use the 'add' command to add any new or 21modified files to the index. 22 23This command can be performed multiple times before a commit. It only 24adds the content of the specified file(s) at the time the add command is 25run; if you want subsequent changes included in the next commit, then 26you must run 'git add' again to add the new content to the index. 27 28The 'git status' command can be used to obtain a summary of which 29files have changes that are staged for the next commit. 30 31The 'add' command can be used to add ignored files with `-f` (force) 32option, but they have to be explicitly and exactly specified from the 33command line. File globbing and recursive behaviour do not add ignored 34files. 35 36Please see gitlink:git-commit[1] for alternative ways to add content to a 37commit. 38 39 40OPTIONS 41------- 42<file>...:: 43 Files to add content from. Fileglobs (e.g. `*.c`) can 44 be given to add all matching files. Also a 45 leading directory name (e.g. `dir` to add `dir/file1` 46 and `dir/file2`) can be given to add all files in the 47 directory, recursively. 48 49-n:: 50 Don't actually add the file(s), just show if they exist. 51 52-v:: 53 Be verbose. 54 55-f:: 56 Allow adding otherwise ignored files. 57 58-i, \--interactive:: 59 Add modified contents in the working tree interactively to 60 the index. 61 62-u:: 63 Update only files that git already knows about. This is similar 64 to what "git commit -a" does in preparation for making a commit, 65 except that the update is limited to paths specified on the 66 command line. If no paths are specified, all tracked files are 67 updated. 68 69\--:: 70 This option can be used to separate command-line options from 71 the list of files, (useful when filenames might be mistaken 72 for command-line options). 73 74 75Configuration 76------------- 77 78The optional configuration variable 'core.excludesfile' indicates a path to a 79file containing patterns of file names to exclude from git-add, similar to 80$GIT_DIR/info/exclude. Patterns in the exclude file are used in addition to 81those in info/exclude. See link:repository-layout.html[repository layout]. 82 83 84EXAMPLES 85-------- 86git-add Documentation/\\*.txt:: 87 88 Adds content from all `\*.txt` files under `Documentation` 89 directory and its subdirectories. 90+ 91Note that the asterisk `\*` is quoted from the shell in this 92example; this lets the command to include the files from 93subdirectories of `Documentation/` directory. 94 95git-add git-*.sh:: 96 97 Considers adding content from all git-*.sh scripts. 98 Because this example lets shell expand the asterisk 99 (i.e. you are listing the files explicitly), it does not 100 consider `subdir/git-foo.sh`. 101 102Interactive mode 103---------------- 104When the command enters the interactive mode, it shows the 105output of the 'status' subcommand, and then goes into its 106interactive command loop. 107 108The command loop shows the list of subcommands available, and 109gives a prompt "What now> ". In general, when the prompt ends 110with a single '>', you can pick only one of the choices given 111and type return, like this: 112 113------------ 114 *** Commands *** 115 1: status 2: update 3: revert 4: add untracked 116 5: patch 6: diff 7: quit 8: help 117 What now> 1 118------------ 119 120You also could say "s" or "sta" or "status" above as long as the 121choice is unique. 122 123The main command loop has 6 subcommands (plus help and quit). 124 125status:: 126 127 This shows the change between HEAD and index (i.e. what will be 128 committed if you say "git commit"), and between index and 129 working tree files (i.e. what you could stage further before 130 "git commit" using "git-add") for each path. A sample output 131 looks like this: 132+ 133------------ 134 staged unstaged path 135 1: binary nothing foo.png 136 2: +403/-35 +1/-1 git-add--interactive.perl 137------------ 138+ 139It shows that foo.png has differences from HEAD (but that is 140binary so line count cannot be shown) and there is no 141difference between indexed copy and the working tree 142version (if the working tree version were also different, 143'binary' would have been shown in place of 'nothing'). The 144other file, git-add--interactive.perl, has 403 lines added 145and 35 lines deleted if you commit what is in the index, but 146working tree file has further modifications (one addition and 147one deletion). 148 149update:: 150 151 This shows the status information and gives prompt 152 "Update>>". When the prompt ends with double '>>', you can 153 make more than one selection, concatenated with whitespace or 154 comma. Also you can say ranges. E.g. "2-5 7,9" to choose 155 2,3,4,5,7,9 from the list. You can say '*' to choose 156 everything. 157+ 158What you chose are then highlighted with '*', 159like this: 160+ 161------------ 162 staged unstaged path 163 1: binary nothing foo.png 164* 2: +403/-35 +1/-1 git-add--interactive.perl 165------------ 166+ 167To remove selection, prefix the input with `-` 168like this: 169+ 170------------ 171Update>> -2 172------------ 173+ 174After making the selection, answer with an empty line to stage the 175contents of working tree files for selected paths in the index. 176 177revert:: 178 179 This has a very similar UI to 'update', and the staged 180 information for selected paths are reverted to that of the 181 HEAD version. Reverting new paths makes them untracked. 182 183add untracked:: 184 185 This has a very similar UI to 'update' and 186 'revert', and lets you add untracked paths to the index. 187 188patch:: 189 190 This lets you choose one path out of 'status' like selection. 191 After choosing the path, it presents diff between the index 192 and the working tree file and asks you if you want to stage 193 the change of each hunk. You can say: 194 195 y - add the change from that hunk to index 196 n - do not add the change from that hunk to index 197 a - add the change from that hunk and all the rest to index 198 d - do not the change from that hunk nor any of the rest to index 199 j - do not decide on this hunk now, and view the next 200 undecided hunk 201 J - do not decide on this hunk now, and view the next hunk 202 k - do not decide on this hunk now, and view the previous 203 undecided hunk 204 K - do not decide on this hunk now, and view the previous hunk 205+ 206After deciding the fate for all hunks, if there is any hunk 207that was chosen, the index is updated with the selected hunks. 208 209diff:: 210 211 This lets you review what will be committed (i.e. between 212 HEAD and index). 213 214 215See Also 216-------- 217gitlink:git-status[1] 218gitlink:git-rm[1] 219gitlink:git-mv[1] 220gitlink:git-commit[1] 221gitlink:git-update-index[1] 222 223Author 224------ 225Written by Linus Torvalds <torvalds@osdl.org> 226 227Documentation 228-------------- 229Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>. 230 231GIT 232--- 233Part of the gitlink:git[7] suite