【发布时间】:2017-08-26 22:44:21
【问题描述】:
我已经运行git status 并看到几个修改的文件和几个删除的文件。
是否可以仅暂存已删除或仅修改的文件?
【问题讨论】:
-
git status还告诉您如何暂存和取消新/修改/删除的文件。
我已经运行git status 并看到几个修改的文件和几个删除的文件。
是否可以仅暂存已删除或仅修改的文件?
【问题讨论】:
git status 还告诉您如何暂存和取消新/修改/删除的文件。
如果您混合了已修改和已删除的文件,并且只想将已删除的文件暂存到索引中,则可以使用 git ls-files 作为过滤器。
git ls-files --deleted | xargs git add
如果您只想将此应用于文件树的一部分,请将一个或多个子目录作为参数提供给ls-files:
git ls-files --deleted -- lib/foo | xargs git add
要仅对修改后的文件执行相同操作,请使用 --modified (-m) 选项而不是 --deleted (-d)。
【讨论】:
-d "\n" 传递给xargs。
git ls-files -z --deleted | xargs -0 git add 用于带有特殊字符(甚至是换行符)的文件名。
.gitconfig,这里有一个警告:您必须将命令字符串化并在其前面加上 ! 前缀,如下所示:sd = !"git ls-files --deleted | xargs git add"
git ls-files --deleted | xargs -d '\n' git add --all
与@steve 的答案相同,但添加了一些变化:
在命令末尾添加--all,将ls-files命令返回的所有文件都添加到索引中
git ls-files --deleted | xargs git add --all
【讨论】:
对于 PowerShell
git ls-files --deleted | % {git add $_}
【讨论】:
对于所有的爱ls-files 来这里,在我看来
git add --all $(git diff --diff-filter=D --name-only)
更直接。
【讨论】:
另一种方式:
git diff --name-only --diff-filter=D | sed 's| |\\ |g' | xargs git add
我在这里使用sed,因为路径可能包含空格字符。
【讨论】: