如何轻松删除多个文件而无需手动输入所有文件到git rm
的完整路径?我有很多我想保留的修改过的文件,因此删除所有已修改的文件也是不可能的。
而且还可以在不手动输入git checkout -- /path/to/file
的情况下还原多个文件的更改?
你可以给git rm
提供通配符。
EG
git rm *.c
或者你可以写下另一个文件中所有文件的名称,比如filesToRemove.txt
:
path/to/file.c
path/to/another/file2.c
path/to/some/other/file3.c
你可以自动化:
find . -name '*.c' > filesToRemove.txt
打开文件并查看名称(以确保它没问题)。
然后:
cat filesToRemove.txt | xargs git rm
要么:
for i in `cat filesToRemove.txt`; do git rm $i; done
查看xargs
的联机帮助页以获取更多选项(特别是如果文件太多)。
只需使用任何其他方法(资源管理器,无论如何)删除它们,然后运行git add -A
。至于还原多个文件,您还可以签出目录。
在POSIX系统上,您可以创建一个匹配所有所需文件的shell glob,您可以将其传递给git rm
和git checkout --
。在Windows上,cmd.exe和PowerShell不包括对应用程序的globbing和farm(git根据我的阅读不对文件执行)。您需要使用Windows命令或脚本来准备文件列表并将其适当地传递给您的git命令以获得类似的效果。
用于将文件列表传递给shell命令的任何策略都适用于接受文件路径的git命令。
要一次删除多个文件,您可能想要查看答案here
您可以删除不需要的文件并运行此命令:git rm $(git ls-files --deleted)
在Windows 10上,使用Git Bash,来自文件结构中的.gitignore
位置。
git rm -r --cached some_directory/
我只是用它来递归地忽略整个目录。这是我的.gitignore
文件中的内容:
# Use .gitignore to ignore a directory and its contents #
/some_directory/
您还可以查看Cygwin,因为它在Windows上提供了大部分Unix / Linux / * BSD功能。 Cygwin包括一个Bash shell和find(1),以及上面提到的其他工具。 (我通常在Windows 7上同时有2-4个Cygwin mintty终端,因为我发现Cygwin非常方便。)
你可以简单地使用:
git add -u
我发现git rm
处理外卡很烦人。查找可以在一行中执行操作:
find . -name '*.c' -exec git rm {} \;
{}
是文件名将被替换的位置。关于find
的好处是它可以过滤各种各样的文件属性而不仅仅是名称。
你只需使用
find . -name '*.DS_Store' | xargs git rm
删除许多与通配符匹配的文件。