【发布时间】:2018-12-18 13:57:49
【问题描述】:
假设我运行 git status 并进行了删除、修改和其他更改。
如何只暂存已删除的文件?
我已经尝试过this post中的答案:
git ls-files --deleted | xargs git add
但这似乎在 windows 下不起作用。
【问题讨论】:
标签: git git-for-windows
假设我运行 git status 并进行了删除、修改和其他更改。
如何只暂存已删除的文件?
我已经尝试过this post中的答案:
git ls-files --deleted | xargs git add
但这似乎在 windows 下不起作用。
【问题讨论】:
标签: git git-for-windows
Windows 不提供xargs 命令,这使得大多数关于如何解决此问题的建议毫无用处,包括在git add 或git 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 能够识别文件并将它们从索引中删除。
【讨论】: