git-rm(1)
=========

NAME
----
git-rm - Remove files from the working tree and from the index

SYNOPSIS
--------
[synopsis]
git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch]
       [--quiet] [--pathspec-from-file=<file> [--pathspec-file-nul]]
       [--] [<pathspec>...]

DESCRIPTION
-----------
Remove files matching pathspec 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 working
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. When
sparse-checkouts are in use (see linkgit:git-sparse-checkout[1]),
`git rm` will only remove paths within the sparse-checkout patterns.


OPTIONS
-------
`<pathspec>...`::
	Files to remove.  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.
+
The command removes only the paths that are known to Git.
+
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`.
+
For more details, see the _<pathspec>_ entry in linkgit:gitglossary[7].

`-f`::
`--force`::
	Override the up-to-date check.

`-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.

`-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.

`--ignore-unmatch`::
	Exit with a zero status even if no files matched.

`--sparse`::
	Allow updating index entries outside of the sparse-checkout cone.
	Normally, `git rm` refuses to update index entries whose paths do
	not fit within the sparse-checkout cone. See
	linkgit:git-sparse-checkout[1] for more.

`-q`::
`--quiet`::
	`git rm` normally outputs one line (in the form of an `rm` command)
	for each file removed. This option suppresses that output.

`--pathspec-from-file=<file>`::
	Pathspec is passed in _<file>_ instead of  args. If
	_<file>_ is exactly `-` then standard input is used. Pathspec
	elements are separated by _LF_ or _CR_/_LF_. Pathspec elements can be
	quoted as explained for the configuration variable `core.quotePath`
	(see linkgit:git-config[1]). See also `--pathspec-file-nul` and
	global `--literal-pathspecs`.

`--pathspec-file-nul`::
	Only meaningful with `--pathspec-from-file`. Pathspec elements are
	separated with _NUL_ character and all other characters are taken
	literally (including newlines and quotes).


REMOVING FILES THAT HAVE DISAPPEARED FROM THE FILESYSTEM
--------------------------------------------------------
There is no option for `git rm` to remove from the index only
the paths that have disappeared from the filesystem. However,
depending on the use case, there are several ways that can be
done.

Using ``git commit -a''
~~~~~~~~~~~~~~~~~~~~~~~
If you intend that your next commit should record all modifications
of tracked files in the working tree and record all removals of
files that have been removed from the working tree with `rm`
(as opposed to `git rm`), use `git commit -a`, as it will
automatically notice and record all removals.  You can also have a
similar effect without committing by using `git add -u`.

Using ``git add -A''
~~~~~~~~~~~~~~~~~~~~
When accepting a new code drop for a vendor branch, you probably
want to record both the removal of paths and additions of new paths
as well as modifications of existing paths.

Typically you would first remove all tracked files from the working
tree using this command:

----------------
git ls-files -z | xargs -0 rm -f
----------------

and then untar the new code in the working tree. Alternately
you could 'rsync' the changes into the working tree.

After that, the easiest way to record all removals, additions, and
modifications in the working tree is:

----------------
git add -A
----------------

See linkgit:git-add[1].

Other ways
~~~~~~~~~~
If all you really want to do is to remove from the index the files
that are no longer present in the working tree (perhaps because
your working tree is dirty so that you cannot use `git commit -a`),
use the following command:

----------------
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
----------------

SUBMODULES
----------
Only submodules using a gitfile (which means they were cloned
with a Git version 1.7.8 or newer) will be removed from the work
tree, as their repository lives inside the `.git` directory of the
superproject. If a submodule (or one of those nested inside it)
still uses a `.git` directory, `git rm` moves the submodules
git directory into the superprojects git directory to protect
the submodule's history. If it exists the `submodule.<name>` section
in the linkgit:gitmodules[5] file will also be removed and that file
will be staged (unless `--cached` or `-n` are used).

A submodule is considered up to date when the `HEAD` is the same as
recorded in the index, no tracked files are modified and no untracked
files that aren't ignored are present in the submodule's work tree.
Ignored files are deemed expendable and won't stop a submodule's work
tree from being removed.

If you only want to remove the local checkout of a submodule from your
work tree without committing the removal, use linkgit:git-submodule[1] `deinit`
instead. Also see linkgit:gitsubmodules[7] for details on submodule removal.

EXAMPLES
--------
`git rm Documentation/\*.txt`::
	Removes all `*.txt` files from the index that are under the
	`Documentation` directory and any of its subdirectories.
+
Note that the asterisk `*` is quoted from the shell in this
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`.

BUGS
----
Each time a superproject update removes a populated submodule
(e.g. when switching between commits before and after the removal) a
stale submodule checkout will remain in the old location. Removing the
old directory is only safe when it uses a gitfile, as otherwise the
history of the submodule will be deleted too. This step will be
obsolete when recursive submodule update has been implemented.

SEE ALSO
--------
linkgit:git-add[1]

GIT
---
Part of the linkgit:git[1] suite
