Git rm几个文件?

时间:2012-03-02 07:06:52

标签: git git-rm

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

还可以在不手动输入git checkout -- /path/to/file

的情况下还原多个文件的更改

11 个答案:

答案 0 :(得分:28)

您可以将通配符提供给git rm

e.g。

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

答案 1 :(得分:9)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

您可以简单地使用:

git add -u

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

git rm -r --cached some_directory/

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

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

答案 8 :(得分:0)

您只需使用

PoolingHttpClientConnectionManager

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

答案 9 :(得分:0)

或者您也可以在另一个文件中写下所有文件的名称,例如filesToRemove.txt

在Git 2.26(2020年第二季度)中,这是一个很好的方法,因为“ git rm”和“ git stash”学习了新的“ --pathspec-from-file”选项。

因此不再有for i in个cat filesToRemove.txt ; do git rm $i; done

一个简单的git rm --pathspec-from-file=filesToRemove.txt就足够了。

请参见commit 8a98758commit 8c3713ccommit 3f3d806commit b229091commit 0093abccommit 2b7460dcommit 5f393dc(2020年2月17日)和commit 6a7aca6Alexandr Miloslavskiy (SyntevoAlex)(2020年1月16日)。
(由Junio C Hamano -- gitster --commit 9b7f726中合并,2020年3月9日)

rm:支持--pathspec-from-file选项

签名人:Alexandr Miloslavskiy

为简单起见而做出的决定:

不允许在args和文件中都传递pathspec。

if (!argc)块需要调整:

此代码实际上表示“不存在pathspec”。
以前,pathspec只能来自命令行参数,因此测试argc是测试pathspec存在的有效方法。但这对--pathspec-from-file不再适用。

在整个--pathspec-from-file故事中,我试图使其行为非常接近在命令行上提供pathspec,以便从一个切换到另一个不会引起任何意外。

但是,在--pathspec-from-file为空的情况下向用户抛出用法会引起困惑,因为“用法”(即argc / argv数组)没有任何问题。

另一方面,在旧情况下扔用法对我来说也很糟糕。尽管这不是什么难题,但我(作为用户)从来不喜欢将命令行与“用法”进行比较以尝试发现差异的体验。由于已经知道错误是什么,所以将特定的错误提供给用户感觉要好得多。

从提交7612a1ef(“ git-rm:荣誉-n标志” 2006-06-09,git v1.4.0)来看,在这种情况下似乎没有显示用法非常重要(此补丁是为了避免出现段错误),并且它不适合其他命令对空pathspec的反应(例如,git add中带有自定义消息)。

因此,我决定在两种情况下都显示新的错误文本。
为了尽早继续测试错误,我将parse_pathspec()提高了。现在,它发生在read_cache() / hold_locked_index() / setup_work_tree()之前,这不会引起任何问题。

答案 10 :(得分:0)

简便方法:

  • 在文件浏览器中删除文件
  • 使用git ls-files --deleted | xargs git add进行登台。按下后,它们将在遥控器中删除。

Git方式: 引用@CpILL所说的(https://stackoverflow.com/a/34889424/6538751)使用

  • find . -name 'DeleteMe*.cs' -exec git rm {} \;

您可以使用通配符。