在Git中,我熟悉如何签出使用git checkout -- [<paths>...]
语法删除的单个文件(建议在执行git status
时使用)。
要获取所有文件,可以创建一个列表,并将该列表作为上述命令的参数。
但是,当您只想删除所有生成该列表的文件(即CWD中的rm-rf,然后要恢复所有文件)时,这是不公平的。
如何签出所有已删除的文件?
最佳答案
生成列表并不难:
git diff --no-renames --name-only --diff-filter=D
要使其适用于
git checkout
,请使用-z
和xargs -0
:git diff --no-renames --name-only --diff-filter=D -z |
xargs -0 git checkout --
请注意,使用
git checkout -f -- .
与上述方法有很大不同,因为git checkout -f -- .
将覆盖已修改但尚未添加到索引中的文件,而上述方法仅从索引中提取仍在索引中但不再在工作树中的文件。(如果没有此类修改过的文件,
git checkout -f -- .
将起作用,但随后也会起作用)。