关于git rm:Git rm几个文件?

Git rm several files?

如何在不手动键入所有文件到git rm的完整路径的情况下轻松删除多个文件?我有很多修改过的文件,所以也不可能删除所有修改过的文件。

而且还可以在不手动键入git checkout -- /path/to/file的情况下恢复几个文件的更改?


您可以将通配符赋给git rm

例如

1
git rm *.c

或者你只需在另一个文件中写下所有文件的名称,比如filesToRemove.txt

1
2
3
path/to/file.c
path/to/another/file2.c
path/to/some/other/file3.c

您可以自动执行此操作:

1
find . -name '*.c' > filesToRemove.txt

打开文件并查看名称(以确保它是正确的)。

然后:

1
cat filesToRemove.txt | xargs git rm

或:

1
for i in `cat filesToRemove.txt`; do git rm $i; done

查看xargs的手册页,了解更多选项(尤其是文件太多的情况)。


只需使用任何其他方法(explorer,随便什么)删除它们,然后运行git add -A。至于恢复多个文件,您还可以签出一个目录。


如果要同时删除多个文件,您可能需要在此处签出答案。

您可以删除不需要的文件并运行以下命令:git rm $(git ls-files --deleted)


在POSIX系统上,您可以创建一个与所有所需文件匹配的shell glob,只需将其传递给git rmgit checkout --。在Windows上,cmd.exe和powershell不包括globbing,也不将其发送到应用程序(Git不处理文件,根据我所读的内容)。您需要使用Windows命令或脚本来准备一个文件列表,并将其适当地传输到git命令,以获得类似的效果。

任何将文件列表传递给shell命令的策略都适用于接受文件路径的git命令。


你只需使用

1
find . -name '*.DS_Store' | xargs git rm

删除许多与通配符匹配的文件。


在Windows10上,使用git bash,从文件结构中的.gitignore位置获取。

1
git rm -r --cached some_directory/

我只是用这个来递归地忽略整个目录。这是我的.gitignore文件中的内容:

1
2
# Use .gitignore to ignore a directory and its contents #
/some_directory/


我发现埃多克斯(EDOCX1)(0)处理外卡的方式很烦人。find可以在一行中完成这个技巧:埃多克斯1〔8〕{}是替换文件名的地方。find的优点在于它可以过滤大量的文件属性,而不仅仅是名称。


您可以简单地使用:

1
git add -u


您还可以查看cygwin,因为它在Windows上提供了许多Unix/Linux/*BSD功能。Cygwin包括一个bash shell和find(1),以及上面提到的其他工具。(我通常在Windows7上有2-4个CygwinMintty终端,因为我觉得Cygwin很方便。)