如果我删除了一个文件,我可以用git恢复它:
git checkout filename
如果我想还原所有已删除的文件,我可以将它们列为:
git diff --diff-filter=D --name-only
我当时想要做的就是恢复它们,但是
git diff --diff-filter=D --name-only | git checkout
不起作用,它只重复列表到标准输出,并且git checkout似乎没有输入。同上| git checkout HEAD - 等等。
我已经在Windows命令提示符,Powershell和Git Bash中尝试了这一点,每次都有相同的结果。
如何正确管道输入到git checkout?
答案 0 :(得分:10)
您无法使用管道。但是,您可以使用 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
并将其称为命令。
答案 1 :(得分:2)
管道导致管道左侧的命令的标准输出被用作管道右侧命令的标准输入。管道<div>
导致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 --
)来分隔文件名,并将导致检出已删除的文件。这适用于任何有效的文件名,包括包含空格和其他特殊字符的文件名。