管git diff到git checkout

Rod*_*ick 5 git

如果我删除一个文件,我可以用git恢复它:

git checkout filename
Run Code Online (Sandbox Code Playgroud)

如果我想还原所有已删除的文件,我可以列出:

git diff --diff-filter=D --name-only
Run Code Online (Sandbox Code Playgroud)

我当时想要做的就是恢复它们,但是

git diff --diff-filter=D --name-only | git checkout
Run Code Online (Sandbox Code Playgroud)

不起作用,它只重复列表到标准输出,并且git checkout似乎没有收到任何输入.同上| git checkout HEAD - 依此类推.

我在Windows命令提示符,Powershell和Git Bash中尝试了这一点,每次都有相同的结果.

如何正确管道输入到git checkout?

Wil*_*sem 12

你不能使用管道.但是你可以使用Unixxargs:

git diff --diff-filter=D --name-only | xargs git checkout
Run Code Online (Sandbox Code Playgroud)

xargs是一个从stdin读取并将行作为参数放在其自己的参数旁边并调用结果的工具.因此,如果git diff生成一条线a和一条线b,xargs git checkout将 - 至少在概念上 - 生成该线git checkout a b并将其称为命令.

  • 替代不使用`xargs`:`git checkout - $(git diff --diff-filter = D --name-only | tr'\n''') (3认同)