linux - 在后续 git 命令中使用 git 命令的输出路径的最简单方法是什么?

标签 linux git bash shell command-line

我经常使用鼠标来做这样的事情:

/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/

相关文章:

java - Linux下从其他工作路径运行java文件

linux - protobuf如何判断一个值是属于可选字段,还是属于另一个对象?

git - 我如何运行 "git status"并获取文件名

linux - 如何在 Linux 中从文件运行 Bash 'export' 命令?

linux - 用从另一个文件复制的内容替换文件中的字符串

linux - 无法在 Antergos 上运行 Neo4j(需要整数表达式)

linux - 什么类型的数据默认返回/dev/random?

git - 在一台计算机上的一个 Git 中切换用户身份

git - 如何检查我的 Maven 项目中的文件名是否包含某些字符(然后构建失败)?

bash - 带有空格的 Mac OS shell 脚本 cd 文件夹不起作用