使`git stash show`命令打印完整的文件路径

6

我尝试从一个存储区中恢复单个文件,因此我需要这些文件的完整路径。但是如果我执行git stash show,通常只会显示一个短路径。

例如:

$ git stash show
 .idea/deployment.xml                               |   4 +-
 .idea/test.iml                                     |   4 +-
 .idea/workspace.xml                                | 635 +++++++++++++++------
 .../local/Black/NewsletterPopup/Block/Show.php    |  13 +
 .../local/Black/NewsletterPopup/etc/config.xml    |  15 +
 .../frontend/venedor/default/layout/popup.xml      |   9 +
 .../default/template/black/popup/index.phtml      |   1 +
 app/etc/modules/Black_NewsletterPopup.xml         |   9 +
 8 files changed, 505 insertions(+), 185 deletions(-)

有没有办法显示完整路径?
如果我执行 git checkout stash@{0} -- .../local/Black/NewsletterPopup/Block/Show.php 那么我会得到 error: pathspec '.../local/Black/NewsletterPopup/Block/Show.php' did not match any file(s) known to git. 我已经 CTRL+F文档,但没有找到相关内容。

git --no-pager stash show 有帮助吗? - Arkadiusz Drabczyk
2
在某些情况下,您可以只需使用 git stash apply 命令,然后重置那些您不希望受到存储影响的文件即可。 - Tim Biegeleisen
@TimBiegeleisen,好主意!+Arkadius,不行,路径仍然很短。 - Black
... 是你的仓库中的一个目录吗?我进行了测试,发现如果将 ... 创建为目录,则可能存在错误。git ls-tree -r -t stash@{0} 打印出有两个子树 .././,而不是 ... - ElpieKay
@ElpieKay,不是的。 - Black
参见https://dev59.com/DGkv5IYBdhLWcg3wpCQz(虽然它是有关git diff的,但git stash show运行git diff)。 - torek
2个回答

9

您可以给git stash show提供git diff类型的格式选项,因此

git stash show --name-only

会是一种方式。

1
请注意,git stash show 运行 git diff --stat,因此您也可以使用 git diff 中的宽度选项。 - torek

0

这不是对你问题的直接回答,但你可以使用 git stash apply 命令,然后再将你不想被暂存影响的文件回退。像这样:

git stash apply

然后

git checkout -- file1.ext

对于每个你不想被存储影响的文件,都要执行相同的操作。

@Mark 给出的答案似乎可行。但是假设你有一个包含15个文件的存储,而你只需要其中14个文件的更改。那么,将整个存储应用并回滚一个文件可能比手动应用14个文件更加方便。


所以 -- 是删除文件吗? - Black
1
@Black 不是的,这只是告诉Git在你应用stash之前,使用当前分支头部的版本替换文件。 - Tim Biegeleisen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接