是否可以从 git stash 中提取单个文件或文件的差异而不弹出 stash 变更集?
在git stash 手册页上,您可以阅读(在“讨论”部分中,就在“选项”描述之后):
存储被表示为一个提交,其树记录工作目录的状态,其第一个父级是创建存储时在 HEAD 的提交。
因此,您可以将存储(例如stash@{0},第一个/最顶层存储)视为合并提交,并使用:
stash@{0}
$ git diff stash@{0}^1 stash@{0} -- <filename>
解释:stash@{0}^1表示给定存储的第一个父级,如上面的解释中所述,是隐藏更改的提交。我们使用这种形式的“git diff”(有两个提交),因为stash@{0}/refs/stash是一个合并提交,我们必须告诉 git 我们想要比较哪个父级。更神秘:
stash@{0}^1
refs/stash
$ git diff stash@{0}^! -- <filename>
也应该可以工作(请参阅git rev-parserev^!手册页以了解“指定范围”部分中的语法解释)。
rev^!
同样,您可以使用git checkout从存储中检查单个文件:
$ git checkout stash@{0} -- <filename>
或将其保存在另一个文件名下:
$ git show stash@{0}:<full filename> > <newfile>
要么
$ git show stash@{0}:./<relative filename> > <newfile>
( 请注意 ,这里的 是相对于项目顶级目录的文件的完整路径名(认为:相对于stash@{0}))。
您可能需要防止stash@{0}外壳扩展,即使用"stash@{0}"or 'stash@{0}'。
"stash@{0}"
'stash@{0}'