我有一个Git repo,我用rm(不是Git rm)删除了四个文件,我的Git状态是这样的:

#    deleted:    file1.txt
#    deleted:    file2.txt
#    deleted:    file3.txt
#    deleted:    file4.txt

我如何从Git中删除这些文件,而不需要手动查看并添加每个文件,就像这样:

git rm file1 file2 file3 file4

理想情况下,我正在寻找与git添加的方式相同的东西。是的,如果可能的话。


当前回答

git ls-files --deleted -z | xargs -0 git rm 

也许这就是你正在寻找的。这对我有用。

其他回答

类似的

git status | sed -s "s/^.*deleted: //" | xargs git rm 

也许吧。

通过使用带有“——all”或“——update”选项的git-add,你可能会得到比你想要的更多的东西。新的和/或修改的文件也会被添加到索引中。我有一个bash别名设置,当我想从git中删除已删除的文件而不接触其他文件:

alias grma='git ls-files --deleted -z | xargs -0 git rm'

从文件系统中删除的所有文件都作为已删除文件添加到索引中。

您可以使用git add -u <filenames>来只执行已删除的文件。

例如,如果您删除了文件模板/*。然后使用git添加-u templates/*. Tpl。

需要使用-u来引用存在于存储库中但不再存在于工作目录中的文件。否则,git add的默认设置是在工作目录中查找文件,如果您指定已删除的文件,它将无法找到它们。

即使你有很多文件要处理,下面的方法也可以:

git ls-files --deleted | xargs git rm

您可能还希望提交注释。

详细信息请参见:有用的Git脚本

git ls-files --deleted -z | xargs -0 git rm --cached

这将删除所有之前被git跟踪的已删除文件,以及处理文件名中有空格的情况。

根据POSIX变量的不同,您可能需要使用xargs -0 -r:这将导致xargs在管道输出空内容时优雅地退出。

EDIT:——cached和——deleted标志一起使用,以防止意外删除尚未删除的文件。