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