views:

128

answers:

3

I deleted a bunch of files / 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.

+2  A: 

Charles Bailey's answer nudged me towards this, but I still welcome something shorter.

$ git diff --name-only --diff-filter=D | xargs git rm
kch
+9  A: 

Without spaces in filenames:

$ git rm `git ls-files -d`

More robust:

$ git ls-files -z -d | xargs -0 git rm
Greg Bacon
Note that it needs to be run from your repo's top-level directory.
Greg Bacon
+3  A: 

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 directory

  • git 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.

Jakub Narębski