Git - rm相当于“add。”?

时间:2010-04-19 15:39:30

标签: git git-add git-rm

如果您从命令行使用Git,是否有办法一次性删除要更改但未更新列表中要删除的所有文件?而不是使用通配符手动删除。

3 个答案:

答案 0 :(得分:8)

以下内容应在索引中暂存所有文件,无论是否删除:

git add -A

答案 1 :(得分:4)

嗯,已更改但未更新下列出的文件已在索引中。您可以使用git checkout .来放弃更改 要删除新文件但尚未添加到索引中,您可以使用git clean 但是要删除已修改的文件并在索引中......好吧没有简单的解决方案,您可能必须使用git rmgit ls-files的组合。

修改
git ls-files -m应列出您要查找的文件。将其与git rm结合使用即可:

git-ls files -m | xargs git rm // NOT TESTED

修改
我可能误解了你问题的一部分。我的解决方案将删除已更改但未更新下列出的所有文件。如果您要删除列为已删除的文件,则必须使用git diff,正如Charles Bailey在答案中所示。

答案 2 :(得分:3)

状态的“已更改但未更新”部分中显示为已删除的文件将从工作树中删除,但不会从索引中删除。要在索引中暂存删除(即从索引中删除文件),您可以执行以下操作:

git diff -z --name-only --diff-filter=D | git update-index --remove -z --stdin

--diff-filter=D仅显示与已删除文件的索引的差异,--name-only只打印其名称,-z使用NUL分隔文件名,这样您就不必担心了关于嵌入换行符的文件名。 update-index然后从索引中删除给定的文件。

如果您的xargs版本支持-0,那么您可以稍微简化一下:

git diff -z --name-only --diff-filter=D | xargs -0 git rm