如何在 Git for Windows 中仅暂存已删除的文件?

Posted

技术标签:

【中文标题】如何在 Git for Windows 中仅暂存已删除的文件?【英文标题】:How do I stage only deleted files in Git for Windows? 【发布时间】:2018-12-18 13:57:49 【问题描述】:

假设我运行 git status 并进行了删除、修改和其他更改。

如何只暂存已删除的文件?

我已经尝试过this post中的答案:

git ls-files --deleted | xargs git add

但这似乎在 windows 下不起作用。

【问题讨论】:

Stage only deleted files with git add的可能重复 【参考方案1】:

Windows 不提供xargs 命令,这使得大多数关于如何解决此问题的建议毫无用处,包括在git addgit rm 的文档页面中提供的建议。

但是git rm 的文档建议使用一个命令来生成可以解决此问题的命令列表。命令是:

git diff --name-only --diff-filter=D --line-prefix="git rm "

它生成从工作树中删除的文件列表,每行一个文件,并在每个文件名前加上 git rm

按原样运行并检查其输出后,您可以通过将> rm-deleted.cmd 附加到命令行,将其输出重定向到.cmd 文件(比如说rm-deleted.cmd),然后运行生成的脚本(@987654333 @) 来实现你的目标。然后您可以删除脚本 (del rm-deleted.cmd);它不是一个可重复使用的通用工具,而只是一个从索引中删除某个文件列表的一次性脚本。

详细了解git diff 的论点。


我手头没有 Windows 实例,也不知道 Git 如何处理名称中包含空格的文件。我怀疑此脚本无法对此类文件进行操作。如果您的文件或目录名称中包含空格,则应将生成的脚本打开到编程编辑器中,将所有出现的 git rm 替换为 git rm " 并在每行后附加引号 (")(您需要编程编辑器能够搜索和替换行尾)。

通过将文件名括在引号中,Windows 命令提示符将它们正确地传递给git rm,Git 能够识别文件并将它们从索引中删除。

【讨论】:

以上是关于如何在 Git for Windows 中仅暂存已删除的文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 git 中取消暂存已删除的文件? [关闭]

git常用操作合集

git stash 常用三种模式

Git-- 记录每次更新到仓库(git clonestatusadddiffcommitrmmv命令详解)

Git之同步代码

如果我之前手动添加文件,我可以让 git 拒绝所有提交吗?