Git rm有几个文件?
如何在不手动键入所有文件到Git rm有几个文件?,git,git-rm,Git,Git Rm,如何在不手动键入所有文件到git rm的完整路径的情况下轻松删除多个文件?我有很多修改过的文件,我想保留,所以删除所有修改过的文件也是不可能的 此外,还可以恢复多个文件的更改,而无需手动键入git checkout--/path/to/file?在POSIX系统上,您可以创建一个与所有所需文件匹配的shell glob,您只需将其传递到git rm和git checkout--。在Windows上,cmd.exe和PowerShell不包括globbing和farm到应用程序(据我所知,git不
git rm
的完整路径的情况下轻松删除多个文件?我有很多修改过的文件,我想保留,所以删除所有修改过的文件也是不可能的
此外,还可以恢复多个文件的更改,而无需手动键入
git checkout--/path/to/file
?在POSIX系统上,您可以创建一个与所有所需文件匹配的shell glob,您只需将其传递到git rm
和git checkout--
。在Windows上,cmd.exe和PowerShell不包括globbing和farm到应用程序(据我所知,git不会对文件执行此操作)。您需要使用Windows命令或脚本来准备文件列表,并将其适当地传输到git命令以获得类似的效果
任何将文件列表传递给shell命令的策略都适用于接受文件路径的git命令。只需使用任何其他方法(资源管理器等)删除它们,然后运行
git add-a
。至于恢复多个文件,您还可以签出一个目录 您可以为git rm
提供通配符
e、 g
或者,您可以将所有文件的名称写在另一个文件中,例如filesToRemove.txt
:
path/to/file.c
path/to/another/file2.c
path/to/some/other/file3.c
您可以自动执行此操作:
find . -name '*.c' > filesToRemove.txt
打开文件并查看名称(以确保其正确)
然后:
或:
查看手册页中的
xargs
了解更多选项(特别是如果文件太多)。您也可以查看,因为它在Windows上提供了许多Unix/Linux/*BSD功能。Cygwin包括一个bashshell和find(1),以及上面提到的其他工具。(我通常在Windows 7上一次安装2-4个Cygwin mintty终端,因为我发现Cygwin非常方便。)要同时删除多个文件,您可能需要签出答案
您可以删除不需要的文件并运行以下命令:git rm$(git ls files--deleted)
您只需使用:
git add -u
从官方
-u
--更新
仅在索引已具有匹配项的位置更新索引
. 这将删除和修改索引项以匹配
工作树,但不添加新文件
如果使用-u选项时给出“否”,则所有跟踪的文件都将显示在
整个工作树都被更新了(Git的旧版本用于限制
对当前目录及其子目录的更新)
换言之
它将更新或删除整个工作树中以前跟踪的文件。它不会添加新文件
我发现git rm对通配符的处理很烦人。“查找”可以在一行中完成此操作:
找到-名称'*.c'-exec git rm{}\;
{}
是替换文件名的地方。find
的好处在于它可以过滤大量文件属性,而不仅仅是名称。在Windows 10上,使用Git Bash,从文件结构中的.gitignore
位置进行过滤
git rm -r --cached some_directory/
我只是用它来递归地忽略整个目录。
这是我的.gitignore
文件中的内容:
# Use .gitignore to ignore a directory and its contents #
/some_directory/
您只需使用
find . -name '*.DS_Store' | xargs git rm
要删除许多与通配符匹配的文件
或者,您可以将所有文件的名称写在另一个文件中,比如filesToRemove.txt
对于Git 2.26(2020年第2季度),这是一个很好的方法,因为“Git rm
”和“Git stash
”学习了新的“--pathspec from file
”选项
因此,在cat filesToRemove.txt中不再为i添加;do git rm$i;完成
一个简单的git rm--pathspec from file=filesToRemove.txt
就足够了
参见,、、(2020年2月17日)和(2020年1月16日)的作者。
(于2020年3月9日合并)
:支持--pathspec from file选项
签字人:Alexandr Miloslavskiy
为简便起见作出的决定:
不允许在参数和文件中同时传递pathspec
如果(!argc)
块:
此代码实际上表示“pathspec不存在”。以前,pathspec只能来自命令行参数,因此测试
argc
是测试pathspec是否存在的有效方法。但对于——文件中的pathspec
,情况不再如此
在整个--pathspec from file
故事中,我试图让它的行为非常接近于在命令行上给出pathspec,这样从一个切换到另一个就不会有任何意外
然而,在文件中为空的--pathspec的情况下向用户抛出用法会让人感到困惑,因为“用法”(即argc/argv数组)没有任何错误
另一方面,在旧的情况下抛出用法对我来说也很糟糕。虽然这不是一个难题,但我(作为用户)从不喜欢将我的命令行与“用法”进行比较,试图找出不同之处。因为已经知道错误是什么,所以将特定错误告知用户感觉好多了
从commit(“git rm
:honor-n
flag”2006-06-09,git v1.4.0)判断,在这种情况下显示用法似乎并不重要(该补丁是为了避免segfault),并且它不适合其他命令对空pathspec的反应(例如,请参阅带有自定义消息的git add
)
因此,我决定在这两种情况下都显示新的错误文本。
为了尽早继续测试错误,我将parse_pathspec()
移到了更高的位置。现在它发生在read\u cache()
/hold\u locked\u index()
/setup\u work\u tree()
之前,这应该不会导致任何问题
简易方法:
- 在文件资源管理器中删除文件
- 使用
git ls文件--deleted | xargs git add
将其暂存。一旦按下按钮,它们将在遥控器中移除
Git方式:
引用什么@C
git rm -r --cached some_directory/
# Use .gitignore to ignore a directory and its contents #
/some_directory/
find . -name '*.DS_Store' | xargs git rm