如何仅解冻某些文件?

时间:2013-03-07 06:26:24

标签: git git-stash

我存储了我的更改。现在我想隐藏存储区中的一些文件。我怎么能这样做?

8 个答案:

答案 0 :(得分:372)

作为mentioned below,并在“How would I extract a single file (or changes to a file) from a git stash?”中详细说明,您可以应用git checkoutgit show来恢复特定文件。

git checkout stash@{0} -- <filename>

覆盖 filename:确保您没有进行本地修改,或者您可能想要合并stashed file instead

(由commented作为Jaime M.,对于某些类似于tcsh的shell,您需要转义特殊字符,语法为:git checkout 'stash@{0}' -- <filename>

  

或将其保存在另一个文件名下:

git show stash@{0}:<full filename>  >  <newfile>
  

(请注意,此处<full filename>是相对于项目顶级目录的文件的完整路径名(请注意:相对于stash@{0}))。

yucer建议in the comments

  

如果要手动选择要从该文件应用哪些更改:

git difftool stash@{0}..HEAD -- <filename>

Vivek添加in the comments

  

看起来“git checkout stash@{0} -- <filename>”会在存储执行时恢复文件的版本 - 它 NOT 应用(仅)应用该文件的存储更改。
  做后者:

git diff stash@{0}^1 stash@{0} -- <filename> | git apply

commentedpeterflynn,在某些情况下,您可能需要| git apply -p1,从传统差异路径中删除一个(p1)前导斜杠)


评论:“解除”(git stash pop),然后:

  • 将您要保留的内容添加到索引(git add
  • 存放其余部分:git stash --keep-index

最后一点是允许你在存放其他文件时保留一些文件的原因 它在“How to stash only one file out of multiple files that have changed”中有说明。

答案 1 :(得分:113)

git checkout stash@{N} <File(s)/Folder(s) path> 

EG。 要仅恢复上次存储的./test.c文件和./include文件夹,

git checkout stash@{0} ./test.c ./include

答案 2 :(得分:35)

我认为VonC的回答可能就是你想要的,但这是一种选择性的“git apply”的方法:

git show stash@{0}:MyFile.txt > MyFile.txt

答案 3 :(得分:13)

首先列出所有的藏匿处

git stash list

stash@{0}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{1}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{2}: WIP on master: 7e450c81 Merge branch 'Offlineseite'

然后显示哪些文件存在于存储中(让我们选择存储1):

git stash show 1 --name-only

//Hint: you can also write
//git stash show stash@{1} --name-only

 ajax/product.php
 ajax/productPrice.php
 errors/Company/js/offlineMain.phtml
 errors/Company/mage.php
 errors/Company/page.phtml
 js/konfigurator/konfigurator.js

然后应用您喜欢的文件:

git checkout stash@{1} -- <filename>

或整个文件夹:

git checkout stash@{1} /errors

它也适用于--,但建议使用它们。请参阅this帖子。

  

将双连字符识别为信号也是常规的   停止选项解释并处理以下所有参数   字面上。

答案 4 :(得分:10)

如果您git stash pop(没有冲突),它将在应用后删除存储。但是如果你git stash apply它将应用补丁而不将其从隐藏列表中删除。然后,您可以使用git checkout -- files...

还原不需要的更改

答案 5 :(得分:3)

还有一种方法:

git diff stash@{N}^! -- path/to/file1 path/to/file2  | git apply -R

答案 6 :(得分:2)

对于Windows用户:大括号在PowerShell中具有特殊含义。您可以使用单引号引起来,也可以使用反引号进行转义。例如:

git checkout 'stash@{0}' YourFile

没有它,您可能会收到一个错误:

Unknown switch 'e'

答案 7 :(得分:0)

例如

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