如果我删除了一个文件,我可以在 git 中恢复它:
git checkout filename
如果我
您不能为此使用管道。但是,您可以使用 Unix 的
xargs
:
git diff --diff-filter=D --name-only | xargs git checkout
xargs
是一个从 stdin 读取并将行作为参数放在其自己的参数旁边并调用结果的工具。因此,如果 git diff
生成一条线 a
和一条线 b
,那么 xargs git checkout
将(至少在概念上)生成线 git checkout a b
并将其称为命令。
管道导致管道左侧命令的标准输出被用作管道右侧命令的标准输入。管道
git checkout | git diff --diff-filter=D --name-only
导致 git checkout
命令的标准输出被用作 git diff --diff-filter=D --name-only
命令的标准输入。 git diff
命令不使用标准输入,因此 git checkout
输出将被默默忽略,最终得到 git diff
命令的输出。
相反,尝试类似
git ls-files --deleted -z | xargs -0 git checkout HEAD --
的东西。这使用空字符 (\0
) 来分隔文件名,并会导致检出已删除的文件。这适用于任何有效的文件名,包括包含空格和其他特殊字符的文件名。