How to add and commit removals made with "rm" instead of "git rm"?
Asked Answered
B

5

20

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.

Borrow answered 6/12, 2009 at 21:23 Comment(2)
Related, but not an exact duplicate: Removing multiple files from a Git repo that have already been deleted from disk. The other question already states that git rm can stage the removed files, it's just looking for a way to stage them all with a single invocation of git rm.Farflung
Possible duplicate of Removing multiple files from a Git repo that have already been deleted from diskJimenez
P
35

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
Phyllode answered 6/12, 2009 at 21:34 Comment(1)
Note that it needs to be run from your repo's top-level directory.Phyllode
L
8

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.

Land answered 7/12, 2009 at 0:55 Comment(1)
This answers the question directly: git commit -aWail
B
4

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

$ git diff --name-only --diff-filter=D | xargs git rm
Borrow answered 6/12, 2009 at 21:33 Comment(0)
C
2

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.

Cuisse answered 14/7, 2014 at 4:34 Comment(0)
C
0

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

Cankerworm answered 26/6, 2014 at 11:30 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.