从Git仓库中删除已经从磁盘删除的多个文件
我有一个Git仓库,使用rm ( 而不是 git rm )删除了四个文件,我的Git状态如下所示: 
 # deleted: file1.txt # deleted: file2.txt # deleted: file3.txt # deleted: file4.txt 
我如何从Git中删除这些文件,而不必手动通过并像这样添加每个文件:
 git rm file1 file2 file3 file4 
 理想情况下,我正在寻找与git add .相同的方法git add . 如果可能的话。 
对于Git 1.x
 $ git add -u 
这告诉git自动登台跟踪文件 – 包括删除以前跟踪的文件。
对于Git 2.0
要整个工作树:
 $ git add -u :/ 
要站在当前的道路上:
 $ git add -u . 
 git ls-files --deleted -z | xargs -0 git rm 
可能是你正在寻找..它适用于我..
您可以使用
 git add -u 
要将删除的文件添加到暂存区域,请将其提交
 git commit -m "Deleted files manually" 
如果你只是运行:
 git add -u 
git会更新它的索引,以知道你已经删除的文件实际上应该是下一次提交的一部分。 然后你可以运行“git commit”来检查这个变化。
或者,如果你运行:
 git commit -a 
它会自动接受这些更改(和其他任何)并提交它们。
更新 :如果您只想添加已删除的文件,请尝试:
 git ls-files --deleted -z | xargs -0 git rm git commit 
你可能正在寻找-A:
 git add -A 
 这与git add -u类似,但是也增加了新的文件。 这大致相当于hg的addremove命令(尽pipe移动检测是自动的)。 
只阶段删除的文件:
 for x in `git status | grep deleted | awk '{print $3}'`; do git rm $x; done 
或(xargs方式):
 git status | awk '/deleted/ {print $3}' | xargs git rm 
您可以别名您的首选命令集以方便以后使用。
 git rm test.txt 
在删除实际文件之前或之后。
通过使用git-add与“–all”或“–update”选项,你可能会得到比你想要的更多。 新的和/或修改的文件也将被添加到索引。 我有一个bash别名设置,当我想删除从git中删除的文件,而无需触及其他文件:
 alias grma='git ls-files --deleted -z | xargs -0 git rm' 
从文件系统中删除的所有文件都被删除后添加到索引中。
这不是真的很重要,但我不同意所选的答案:
 git add -u 
…如果工作树中的相应文件已被删除,则将从索引中删除文件,但是它也将暂存修改的被跟踪文件的新内容。
 git rm $(git ls-files --deleted) 
另一方面只会删除被追踪的已删除文件。
所以后者在我看来是更好的select。
如果这些是唯一的变化,你可以简单的做
 git commit -a 
提交所有更改。 这将包括删除的文件。
 git ls-files --deleted | xargs git rm 
是仅添加已删除文件的最佳select。
这里有一些其他的select。
 git add . => Add all (tracked and modified)/new files in the working tree. git add -u => Add all modified/removed files which are tracked. git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree. git commit -a -m "commit message" - Add and commit modified/removed files which are tracked. 
git add -u
-u –update只匹配已经跟踪的索引文件而不是工作树。 这意味着它永远不会展示新文件,但是它将逐步修改被跟踪文件的新内容,并且如果工作树中的相应文件已被删除,它将从索引中删除文件。
如果没有,默认为“。”; 换句话说,更新当前目录及其子目录中的所有跟踪文件。
这个简单的解决scheme适用于我:
 git rm $(git ls-files --deleted) 
 如果你想把它添加到你的.gitconfig请执行以下操作: 
 [alias] rma = !git ls-files --deleted -z | xargs -0 git rm 
那么你所要做的就是运行:
 git rma 
 git ls-files --deleted -z | xargs -0 git rm --cached 
这将删除以前由git跟踪的所有被删除的文件,以及处理文件名中有空格的情况。
 根据您的POSIX变体,您可能需要使用xargs -0 -r :这将导致xargs在pipe道空内容时正常退出。 
 编辑: – --cached和 – 删除标志串联使用,以防止意外删除尚未被删除的文件。 
尝试一下。
 -a --all Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected. git add . && git commit -m -a "Your commit" 
要么
 git add --all && git commit -m "Your commit" 
 请使用-t来查看哪个命令实际上正在运行 
我只是调整了Virender的答案做同样的事情:
 git ls-files --deleted -z | xargs -t -0 git rm 
没有任何标志git-add只会删除已删除的文件; 如果你所有的修改都是被删除的文件,那么你很好,但除此之外,你需要运行git-status并parsing输出。
根据杰里米的回答,这是我得到的:
 git status | sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm 
- 获取文件的状态。
- 对于已删除的文件,请隔离文件的名称。
-  删除所有以#开头的行,以及删除了“删除”一词的状态行; 我不记得那是什么东西,确切地说,现在已经不存在了,所以你可能需要对不同的情况进行修改。 我认为expression式的分组可能是一个GNU特有的function,所以如果你不使用gnutils,你可能需要添加多个grep -v行。
-  将文件传递给git rm。
现在坚持在一个shell别名…
如上所述
 git add -u 
阶段删除的文件进行删除,但也修改文件进行更新。
取消修改的文件,你可以做
 git reset HEAD <path> 
 如果你想保持你的承诺有组织和干净。 
  注意:这也可能会取消已删除的文件,请小心使用这些通配符。 
即使您有很多文件需要处理,以下方法仍然有效:
 git ls-files --deleted | xargs git rm 
你可能也想要提交一个评论。
有关详细信息,请参阅: 有用的Git脚本
我需要相同的和使用git gui“舞台改变”button。 它也增加了所有。
而“阶段改变”后,我做了“承诺”…
所以我的工作目录再次清洁。
 git commit -m 'commit msg' $(git ls-files --deleted) 
我已经删除了这些文件后,这工作对我来说。
 你可以使用git add -u <filenames>来git add -u <filenames>已删除的文件。 
 例如,如果您删除了文件templates/*.tpl ,则使用git add -u templates/*.tpl 。 
  -u是必需的,以便引用存在于存储库中但不再存在于工作目录中的文件。 否则, git add的默认值是在工作目录中寻找文件,如果你指定了在那里删除的文件,它将不会find它们。 
就像是
 git status | sed -s "s/^.*deleted: //" | xargs git rm 
可以做到这一点。
对于视觉工作室项目
 'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm' 
这在删除的文件path有空格时很有用
 为命令rm-all添加暂存已删除文件的系统别名 
  UNIX alias rm-all='git rm $(git ls-files --deleted)' 
  WINDOWS doskey rm-all=bash -c "git rm $(git ls-files --deleted)" 
注意
  Windows需要安装bash 。 
(又一变化)
我想删除所有已经从磁盘文件中删除,但从一个特定的文件夹,其他文件夹保持不变。 以下为我工作:
 git ls-files --deleted | grep <folder-name> | xargs git rm 
我发现迄今为止最灵活的解决scheme是
 git cola 
并select所有我想要删除的文件。
(注意,我通常在git中执行一切命令行,但是git处理移除的文件有点尴尬)。