问题描述
在git stash 手册页上,您可以阅读(在“讨论”部分中,就在“选项”描述之后):
因此,您可以将存储(例如stash@{0}
,第一个/最顶层存储)视为合并提交,并使用:
$ git diff stash@{0}^1 stash@{0} -- <filename>
解释:stash@{0}^1
表示给定存储的第一个父级,如上面的解释中所述,是隐藏更改的提交。我们使用这种形式的“git
diff”(有两个提交),因为stash@{0}
/refs/stash
是一个合并提交,我们必须告诉 git 我们想要比较哪个父级。更神秘:
$ git diff stash@{0}^! -- <filename>
也应该可以工作(请参阅git rev-parserev^!
手册页以了解“指定范围”部分中的语法解释)。
同样,您可以使用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}'
。
解决方法
是否可以从 git stash 中提取单个文件或文件的差异而不弹出 stash 变更集?