问题
I deleted a bunch of files and directories from a Git repository using rm
, the Finder, etc.
I'm looking for a Git command that'll record these to the index as marked for removal, as if I had called git rm
on them.
I understand git add -u
will do this, along with a bunch of other things. I'd like my command to exclusively handle removals.
回答1:
Without spaces in filenames:
$ git rm `git ls-files -d`
More robust:
$ git ls-files -z -d | xargs -0 --no-run-if-empty git rm
回答2:
Take a look what Jonio C Hamano wrote in "Re: [PATCH 1/2] Documentation: 'git add -A' can remove files" post at git mailing list, namely that this question looks like XY problem (you are asking about assumed solution Y to the problem, instead about the problem X itself). The solution to problem (if it is really "XY problem" situation) might be:
git commit -a
, which would automatically pick up deletions, committing current state of tracked files in working directorygit add -A
, which would add not ignored untracked files and remove no longer existing files, e.g. if you want to create commit from sideways update of working directory, e.g. unpacking a snapshot or result of rsync.
Nevertheless if what you ask is a problem (and not solution), then as you can see from other answers there are tools in place to do it.
回答3:
Charles Bailey's answer nudged me towards this, but I still welcome something shorter.
$ git diff --name-only --diff-filter=D | xargs git rm
回答4:
In Git 2.0, git add
behaves like git add --ignore-removal <pathspec>
which ignores paths you removed from your working tree.
You can use git add --all <pathspec>
to record the removals.
Run git status
to check the paths you removed from your working tree.
回答5:
This command will give you a list of all deleted files which will be forward to git rm. So all files will be removed. If no deleted files were found, nothing will be happen:
git ls-files -z -d | xargs -0 --no-run-if-empty git rm
来源:https://stackoverflow.com/questions/1856654/how-to-add-and-commit-removals-made-with-rm-instead-of-git-rm