如何取消仅某些文件?

我把零钱藏起来了。现在,我只想从隐藏中删除一些文件。我该怎么做呢?

223388 次浏览

下面提到,并详细在"我如何从git存储中提取单个文件(或对文件的更改)?",您可以应用使用git checkoutgit show来恢复特定的文件。

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

在Git 2.23+(2019年8月)中,使用git restore,取代令人困惑的git checkout命令:

git restore --source=stash@{0} -- <filename>

这样做覆盖 filename:确保你没有本地修改,或者你可能想合并而是存储文件

(正如评论 by 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>"恢复执行隐藏时文件的版本——它应用(只是)该文件的隐藏更改。
执行后者:

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

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


正如评论:“unstash"(# EYZ0),那么:

  • 添加你想要保留的索引(git add)
  • 把剩下的藏起来:git stash --keep-index
最后一点是什么允许你在保存一些文件的同时保存其他文件。
它在"如何在已更改的多个文件中仅隐藏一个文件".

如果你git stash pop(没有冲突),它会在应用后删除隐藏。但是如果你git stash apply,它将应用补丁而不从收藏列表中删除它。然后您可以使用git checkout -- files...恢复不需要的更改

我认为VonC的答案可能是你想要的,但这里有一种方法来做一个选择性的“git apply”:

git show stash@{0}:MyFile.txt > MyFile.txt
git checkout stash@{N} <File(s)/Folder(s) path>
< p >。

.c只恢复上次存储的。/test.c文件和。/include文件夹
git checkout stash@{0} ./test.c ./include

还有一种方法:

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

首先列出所有的藏匿物

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'

然后显示哪些文件在stash(让我们选择stash 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

不使用--也可以,但建议使用它们。见帖子。

通常还可以将双连字符识别为to的信号 停止选项解释并处理以下所有参数 真的。< / p >

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

git checkout 'stash@{0}' YourFile < /代码> < / p >

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

# EYZ0

为例

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