我有一个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添加的方式相同的东西。是的,如果可能的话。


当前回答

请使用-t查看实际正在运行的命令

我只是调整了Virender的答案来做同样的事情:

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

其他回答

Git add -u

- u - - -更新 只匹配索引中已经跟踪的文件,而不是工作树。这意味着它将永远不会运行新的文件,但是它将运行已修改的跟踪文件的新内容,并且如果工作树中的相应文件已被删除,它将从索引中删除文件。

如果给出了no,默认为".";换句话说,更新当前目录及其子目录中的所有跟踪文件。

并不是说这真的很重要,但我不同意选择的答案:

git add -u 

... 如果工作树中的相应文件已被删除,则将从索引中删除文件,但它也将执行已修改的跟踪文件的新内容。

git rm $(git ls-files --deleted)

... 另一方面,将只rm已删除的文件被跟踪。

所以在我看来后者是更好的选择。

告诉命令自动生成已修改和删除的文件,但未通知Git的新文件不受影响:

——一个 ——所有

git add . && git commit -m -a "Your commit"

or

git add --all && git commit -m "Your commit"

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

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

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

对于Git 1.x

$ git add -u

这告诉git自动执行跟踪文件——包括删除之前跟踪的文件。

对于 Git 2.0

展示你的整个工作树:

$ git add -u :/

只执行当前路径:

$ git add -u .