我经常使用鼠标来做这样的事情:
/home/me-$ git log --name-status -1
commit a10e63af1f4b1b2c28055fed55d4f2bb3225a541
Author: Me <me@me.com>
Date: Tue Aug 18 13:04:04 2015 -0400
XYZ-376 make ctors public
M x/y/z/Class1.java
M x/y/z/Class2.java
/home/me-$ git checkout -- x/y/z/Class2.java # <-- copy/paste with the mouse
我知道一些 git 命令接受通配符,这在一定程度上缓解了这个问题,但我想知道是否有一种方法可以从以前的命令中专门引用路径规范等。
如何在不使用鼠标且不手动重新输入长路径的情况下运行这样的命令?
最佳答案
我通常为此使用子 shell ( $(<command in subshell here...>)
)。
例如,有时我删除了很多文件,我不得不 git rm
每一个。
有命令 git ls-files --deleted
返回所有丢失文件的名称。我可以将它与 git rm
结合起来像这样:
git rm $(git ls-files --deleted)
这是一个不好的例子,因为(正如我后来发现的),使用 git add --all
可以更容易地实现此操作.但我认为它说明了这一点。
在你的例子中,如果你想 check out 在上一次提交中更改的所有文件,将很难解析 git log --name-status
的输出。 ,因为它包含其他信息,但您可以使用类似 git diff HEAD^ --name-only
的内容相反。
所以:
git checkout $(git diff HEAD^ --name-only)
将在您的示例中执行此操作。
我注意到使用 $(...)
的一件好事语法是它在 Bash 和在 PowerShell 中都有效。
关于linux - 在后续 git 命令中使用 git 命令的输出路径的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32142329/