Delete files from git index when they are already deleted from fs
I have a bunch of files deleted from the fs and listed as deleted in git status
.
How 开发者_C百科can I stage this changes faster then running git rm
for each file?
You can do this with:
git ls-files --deleted -z | xargs -0 git rm
Whenever this question is asked, people suggest git add -u
, but the problem with that answer is that it also stages other modifications in your working copy, not just deletions. That might be OK in many situations, but if you want to just stage the deletion of files that have been deleted from the working copy, the suggestion I've made is more precise.
There's actually a section of the git rm
documentation that discusses how to do what you want - I believe that the command suggested in the "Other ways" section is equivalent to what I've suggested here.
Use the -u
-flag: man git-add
git add -u .
You can use git rm --cached "path/to/file"
to stage a single deleted file.
Use git rm -r --cached -- "path/to/directory"
to stage a complete deleted directory.
git commit -a
would stage deleted files (as well as modified) and prompt you for your commit message. I usually execute git commit -av
(verbose) to also see diffs of modified files.
From the manual page:
by using the -a switch with the commit command to automatically "add" changes from all known files (i.e. all files that are already listed in the index) and to automatically "rm" files in the index that have been removed from the working tree, and then perform the actual commit;
git add -A
will do the job for you
On windows w/out Cygwin or powershell you can use like so:
git ls-files --deleted -z | for /f %f in ('more') do git rm --cached "%f"
If the deleted file was in a parent folder that exists then you can simply:
git add parent_folder_path/*
If that does not work try adding the parent of the parent:
git add parent_of_parent_path/parent_folder/*
If this is not what you want, see other's answers.
精彩评论