我把零钱藏起来了。现在,我只想从隐藏中删除一些文件。我该怎么做呢?
当前回答
正如下面提到的,以及“如何从git存储中提取单个文件(或对文件的更改)?”中详细说明的那样,您可以应用使用git checkout或git show来恢复特定的文件。
git checkout stash@{0} -- <filename>
在Git 2.23+(2019年8月)中,使用Git restore,它取代了令人困惑的Git checkout命令:
git restore --source=stash@{0} -- <filename>
这将覆盖filename:请确保您没有进行本地修改,否则您可能希望合并所存储的文件。
(正如Jaime M.所评论的,对于某些shell,如tcsh,你需要转义特殊字符,语法将是:git checkout 'stash@{0}'——<filename>)
或者将其保存在另一个文件名下:
git show stash@{0}:<full filename> > <newfile>
(注意这里<full filename>是一个文件相对于一个项目的顶部目录的完整路径名(想想:相对于stash@{0}))。
Yucer在评论中建议:
如果您想手动选择要从该文件应用哪些更改:
git difftool stash@{0}..HEAD -- <filename>
Vivek在评论中补充道:
看起来像“git checkout stash@{0}——<filename>”恢复了文件的版本,当stash被执行时——它不应用(只是)该文件的存储更改。 做后者:
git diff stash@{0}^1 stash@{0} -- <filename> | git apply
(正如peterflynn所评论的,在某些情况下,您可能需要| git apply -p1,从传统的diff路径中删除一个(p1)前导斜杠)
正如评论:“unstash”(git stash pop),然后:
将你想要保留的内容添加到索引中(git Add) 剩下的:git Stash——keep-index
最后一点是什么允许您在保存一些文件的同时保存其他文件。 它在“如何从多个已更改的文件中仅保存一个文件”中进行了说明。
其他回答
还有一种方法:
git diff stash@{N}^! -- path/to/file1 path/to/file2 | git apply -R
我认为VonC的答案可能是你想要的,但这里有一种方法来做一个选择性的“git apply”:
git show stash@{0}:MyFile.txt > MyFile.txt
为例
git stash show --name-only
结果
ofbiz_src/.project
ofbiz_src/applications/baseaccounting/entitydef/entitymodel_view.xml
ofbiz_src/applications/baselogistics/webapp/baselogistics/delivery/purchaseDeliveryDetail.ftl
ofbiz_src/applications/baselogistics/webapp/baselogistics/transfer/listTransfers.ftl
ofbiz_src/applications/component-load.xml
ofbiz_src/applications/search/config/elasticSearch.properties
ofbiz_src/framework/entity/lib/jdbc/mysql-connector-java-5.1.46.jar
ofbiz_src/framework/entity/lib/jdbc/postgresql-9.3-1101.jdbc4.jar
然后弹出隐藏在特定的文件
git checkout stash@{0} -- ofbiz_src/applications/baselogistics/webapp/baselogistics/delivery/purchaseDeliveryDetail.ftl
其他相关命令
git stash list --stat
get stash show
如果你git隐藏pop(没有冲突),它将删除隐藏后,它被应用。但是如果你git stash apply,它将应用补丁而不从stash列表中删除它。然后你可以用git checkout - files…
正如下面提到的,以及“如何从git存储中提取单个文件(或对文件的更改)?”中详细说明的那样,您可以应用使用git checkout或git show来恢复特定的文件。
git checkout stash@{0} -- <filename>
在Git 2.23+(2019年8月)中,使用Git restore,它取代了令人困惑的Git checkout命令:
git restore --source=stash@{0} -- <filename>
这将覆盖filename:请确保您没有进行本地修改,否则您可能希望合并所存储的文件。
(正如Jaime M.所评论的,对于某些shell,如tcsh,你需要转义特殊字符,语法将是:git checkout 'stash@{0}'——<filename>)
或者将其保存在另一个文件名下:
git show stash@{0}:<full filename> > <newfile>
(注意这里<full filename>是一个文件相对于一个项目的顶部目录的完整路径名(想想:相对于stash@{0}))。
Yucer在评论中建议:
如果您想手动选择要从该文件应用哪些更改:
git difftool stash@{0}..HEAD -- <filename>
Vivek在评论中补充道:
看起来像“git checkout stash@{0}——<filename>”恢复了文件的版本,当stash被执行时——它不应用(只是)该文件的存储更改。 做后者:
git diff stash@{0}^1 stash@{0} -- <filename> | git apply
(正如peterflynn所评论的,在某些情况下,您可能需要| git apply -p1,从传统的diff路径中删除一个(p1)前导斜杠)
正如评论:“unstash”(git stash pop),然后:
将你想要保留的内容添加到索引中(git Add) 剩下的:git Stash——keep-index
最后一点是什么允许您在保存一些文件的同时保存其他文件。 它在“如何从多个已更改的文件中仅保存一个文件”中进行了说明。
推荐文章
- 在单个文件中重新启动/撤消冲突解决方案
- Visual Studio代码如何解决合并冲突与git?
- 无法推送到远程分支,无法解析到分支
- Git:如何将数据库重置为特定的提交?
- 如何在合并期间使用Git和命令行保存本地文件或远程文件?
- 能够用一个命令推到所有git遥控器?
- 重新基于Git合并提交
- 忽略已经签入目录的内容?
- 如何从windows cmd保存git提交消息?
- (Mac) -bash: __git_ps1:命令未找到
- 如何删除多个已删除的文件在Git仓库
- 使用vimdiff查看所有' git diff '
- 如何拉特定的目录与git
- 本地存储库中的文件与源文件之间的差异
- 将Git存储库内容移动到另一个存储库,保存历史记录