微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 git stash 中提取单个文件或对文件的更改?

如何解决如何从 git stash 中提取单个文件或对文件的更改?

git stash 手册页上,您可以阅读(在“讨论”部分中,就在“选项”描述之后):

存储被表示为一个提交,其树记录工作目录的状态,其第一个父级是创建存储时在 HEAD 的提交。

因此,您可以将存储(例如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 变更集?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。