如何轻松删除多个文件而无需手动输入所有文件的完整路径git rm
?我有很多我想保留的修改过的文件,因此无法删除所有已修改的文件。
还可以在不手动输入git checkout -- /path/to/file
?
答案 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 rm
和git 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 8a98758,commit 8c3713c,commit 3f3d806,commit b229091,commit 0093abc,commit 2b7460d,commit 5f393dc(2020年2月17日)和commit 6a7aca6的Alexandr 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 {} \;
您可以使用通配符。