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