如果您从命令行使用Git,是否有办法一次性删除要更改但未更新列表中要删除的所有文件?而不是使用通配符手动删除。
答案 0 :(得分:8)
以下内容应在索引中暂存所有文件,无论是否删除:
git add -A
答案 1 :(得分:4)
嗯,已更改但未更新下列出的文件已在索引中。您可以使用git checkout .
来放弃更改
要删除新文件但尚未添加到索引中,您可以使用git clean
但是要删除已修改的文件并在索引中......好吧没有简单的解决方案,您可能必须使用git rm
和git 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