git 如何只释放某些文件?

uinbv5nw  于 2023-05-15  发布在  Git
关注(0)|答案(9)|浏览(157)

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

vbkedwbf

vbkedwbf1#

作为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>

在Git 2.23+(2019年8月)中,使用git restore,它取代了confusing git checkout command

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

这会覆盖filename:确保你没有本地修改,或者你可能想合并stashed file instead
(As由Jaime M.评论,对于某些shell,如tcsh,你需要转义特殊字符,语法如下:git checkout 'stash@{0}' -- <filename>
或将其保存在另一个文件名下:

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

(note这里<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

(as peterflynn注解,在某些情况下可能需要| git apply -p1,从传统的diff路径中删除一个(p1)前导斜杠)
评论如下:“unstash”(git stash pop),然后:

  • 添加你想保留的内容到索引(git add
  • 把剩下的藏起来:git stash --keep-index

最后一点是什么允许您保留一些文件,同时隐藏其他文件。
它在“How to stash only one file out of multiple files that have changed”中说明。

hs1rzwqc

hs1rzwqc2#

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

例如.要从最后一次隐藏中仅恢复./test.c文件和./include文件夹,

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

ldfqzlk83#

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

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

bnl4lu3b4#

首先列出所有的藏匿点

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

它也可以在没有--的情况下工作,但建议使用它们。参见this文章。
通常,将双连字符识别为停止选项解释的信号,并按字面意思处理所有后续参数。

ecr0jaav

ecr0jaav5#

还有一个方法:

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

irtuqstp6#

对于Windows用户:大括号在PowerShell中有特殊的含义。你可以用单引号括起来,也可以用反引号转义。例如:
git checkout 'stash@{0}' YourFile
如果没有它,您可能会收到一个错误:
Unknown switch 'e'

jobtbby3

jobtbby37#

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

92dk7w1h

92dk7w1h8#

例如

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
8yparm6h

8yparm6h9#

对于Windows用户,为了避免Unknown switch 'e'stash@{0}需要包围内部引号,如下所示
git restore --source='stash@{0}' -- <filename>

相关问题