在Git中,我熟悉如何签出使用git checkout -- [<paths>...]语法删除的单个文件(建议在执行git status时使用)。
要获取所有文件,可以创建一个列表,并将该列表作为上述命令的参数。
但是,当您只想删除所有生成该列表的文件(即CWD中的rm-rf,然后要恢复所有文件)时,这是不公平的。
如何签出所有已删除的文件?

最佳答案

生成列表并不难:

git diff --no-renames --name-only --diff-filter=D

要使其适用于git checkout,请使用-zxargs -0
git diff --no-renames --name-only --diff-filter=D -z |
    xargs -0 git checkout --

请注意,使用git checkout -f -- .与上述方法有很大不同,因为git checkout -f -- .将覆盖已修改但尚未添加到索引中的文件,而上述方法仅从索引中提取仍在索引中但不再在工作树中的文件。
(如果没有此类修改过的文件,git checkout -f -- .将起作用,但随后也会起作用)。

08-27 21:03
查看更多