Git rm几个文件?

问题描述 投票:20回答:9

如何轻松删除多个文件而无需手动输入所有文件到git rm的完整路径?我有很多我想保留的修改过的文件,因此删除所有已修改的文件也是不可能的。

而且还可以在不手动输入git checkout -- /path/to/file的情况下还原多个文件的更改?

git git-rm
9个回答
28
投票

你可以给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的联机帮助页以获取更多选项(特别是如果文件太多)。


9
投票

只需使用任何其他方法(资源管理器,无论如何)删除它们,然后运行git add -A。至于还原多个文件,您还可以签出目录。


1
投票

在POSIX系统上,您可以创建一个匹配所有所需文件的shell glob,您可以将其传递给git rmgit checkout --。在Windows上,cmd.exe和PowerShell不包括对应用程序的globbing和farm(git根据我的阅读不对文件执行)。您需要使用Windows命令或脚本来准备文件列表并将其适当地传递给您的git命令以获得类似的效果。

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


1
投票

要一次删除多个文件,您可能想要查看答案here

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


1
投票

在Windows 10上,使用Git Bash,来自文件结构中的.gitignore位置。

git rm -r --cached some_directory/

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

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

0
投票

您还可以查看Cygwin,因为它在Windows上提供了大部分Unix / Linux / * BSD功能。 Cygwin包括一个Bash shell和find(1),以及上面提到的其他工具。 (我通常在Windows 7上同时有2-4个Cygwin mintty终端,因为我发现Cygwin非常方便。)


0
投票

你可以简单地使用:

git add -u

0
投票

我发现git rm处理外卡很烦人。查找可以在一行中执行操作: find . -name '*.c' -exec git rm {} \; {}是文件名将被替换的位置。关于find的好处是它可以过滤各种各样的文件属性而不仅仅是名称。


0
投票

你只需使用

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

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

© www.soinside.com 2019 - 2024. All rights reserved.