Merge branch 'jc/apply-whitespace'
[gitweb.git] / Documentation / git-rm.txt
index 401bfb2d9cc4db22d0dd12b5c086ad537896fe65..9c81b72dbebfec9b77128fb58d5aab33a143d594 100644 (file)
@@ -3,77 +3,99 @@ git-rm(1)
 
 NAME
 ----
-git-rm - Remove files from the working tree and from the index.
+git-rm - Remove files from the working tree and from the index
 
 SYNOPSIS
 --------
-'git-rm' [-f] [-n] [-v] [--] <file>...
+'git-rm' [-f] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>...
 
 DESCRIPTION
 -----------
-A convenience wrapper for git-update-index --remove. For those coming
-from cvs, git-rm provides an operation similar to "cvs rm" or "cvs
-remove".
+Remove files from the index, or from the working tree and the index.
+`git rm` will not remove a file from just your working directory.
+(There is no option to remove a file only from the work tree
+and yet keep it in the index; use `/bin/rm` if you want to do that.)
+The files being removed have to be identical to the tip of the branch,
+and no updates to their contents can be staged in the index,
+though that default behavior can be overridden with the `-f` option.
+When '--cached' is given, the staged content has to
+match either the tip of the branch or the file on disk,
+allowing the file to be removed from just the index.
 
 
 OPTIONS
 -------
 <file>...::
-       Files to remove from the index and optionally, from the
-       working tree as well.
+       Files to remove.  Fileglobs (e.g. `*.c`) can be given to
+       remove all matching files.  If you want git to expand
+       file glob characters, you may need to shell-escape them.
+       A leading directory name
+       (e.g. `dir` to remove `dir/file1` and `dir/file2`) can be
+       given to remove all files in the directory, and recursively
+       all sub-directories,
+       but this requires the `-r` option to be explicitly given.
 
 -f::
-       Remove files from the working tree as well as from the index.
+       Override the up-to-date check.
 
--n::
-        Don't actually remove the file(s), just show if they exist in
-        the index.
+-n, \--dry-run::
+       Don't actually remove any file(s).  Instead, just show
+       if they exist in the index and would otherwise be removed
+       by the command.
 
--v::
-        Be verbose.
+-r::
+        Allow recursive removal when a leading directory name is
+        given.
 
---::
+\--::
        This option can be used to separate command-line options from
        the list of files, (useful when filenames might be mistaken
        for command-line options).
 
+\--cached::
+       Use this option to unstage and remove paths only from the index.
+       Working tree files, whether modified or not, will be
+       left alone.
 
-DISCUSSION
-----------
+\--ignore-unmatch::
+       Exit with a zero status even if no files matched.
+
+-q, \--quiet::
+       git-rm normally outputs one line (in the form of an "rm" command)
+       for each file removed. This option suppresses that output.
 
-The list of <file> given to the command is fed to `git-ls-files`
-command to list files that are registered in the index and
-are not ignored/excluded by `$GIT_DIR/info/exclude` file or
-`.gitignore` file in each directory.  This means two things:
 
-. You can put the name of a directory on the command line, and the
-  command will remove all files in it and its subdirectories (the
-  directories themselves are never removed from the working tree);
+DISCUSSION
+----------
 
-. Giving the name of a file that is not in the index does not
-  remove that file.
+The <file> list given to the command can be exact pathnames,
+file glob patterns, or leading directory names.  The command
+removes only the paths that are known to git.  Giving the name of
+a file that you have not told git about does not remove that file.
 
+File globbing matches across directory boundaries.  Thus, given
+two directories `d` and `d2`, there is a difference between
+using `git rm \'d\*\'` and `git rm \'d/\*\'`, as the former will
+also remove all of directory `d2`.
 
 EXAMPLES
 --------
 git-rm Documentation/\\*.txt::
-
        Removes all `\*.txt` files from the index that are under the
-       `Documentation` directory and any of its subdirectories. The
-       files are not removed from the working tree.
+       `Documentation` directory and any of its subdirectories.
 +
 Note that the asterisk `\*` is quoted from the shell in this
-example; this lets the command include the files from
-subdirectories of `Documentation/` directory.
+example; this lets git, and not the shell, expand the pathnames
+of files and subdirectories under the `Documentation/` directory.
 
 git-rm -f git-*.sh::
+       Because this example lets the shell expand the asterisk
+       (i.e. you are listing the files explicitly), it
+       does not remove `subdir/git-foo.sh`.
 
-       Remove all git-*.sh scripts that are in the index. The files
-       are removed from the index, and (because of the -f option),
-       from the working tree as well. Because this example lets the
-       shell expand the asterisk (i.e. you are listing the files
-       explicitly), it does not remove `subdir/git-foo.sh`.
-
+See Also
+--------
+linkgit:git-add[1]
 
 Author
 ------
@@ -85,5 +107,4 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the gitlink:git[7] suite
-
+Part of the linkgit:git[7] suite