git-rm doc: Describe how to sync index & work tree
Newcomers to git that want to remove from the index only the files that have disappeared from the working tree will probably look for a way to do that in the documentation for 'git rm'. Therefore, describe how that can be done (even though it involves other commands than 'git rm'). Based on a suggestion by Junio, but re-arranged and rewritten to better fit into the style of command reference. While at it, change a single occurrence of "work tree" to "working tree" for consistency. Signed-off-by: Björn Gustavsson <bgustavsson@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
441947f6d7
commit
47b7012024
@ -13,7 +13,7 @@ DESCRIPTION
|
||||
-----------
|
||||
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
|
||||
(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,
|
||||
@ -81,6 +81,58 @@ 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`.
|
||||
|
||||
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
|
||||
----------------
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
git rm Documentation/\\*.txt::
|
||||
|
Loading…
Reference in New Issue
Block a user