git-rm(1) (original) (raw)
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:
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