我藏了零钱。现在,我只想取消隐藏部分文件。我怎样才能做到这一点?
我藏了零钱。现在,我只想取消隐藏部分文件。我怎样才能做到这一点?
Answers:
正如下面提到的,并在详细的“ 我怎么会提取一个混帐藏匿单个文件(或对文件的更改)? ”,你可以申请使用git checkout
或git show
恢复特定文件。
git checkout stash@{0} -- <filename>
这确实会覆盖 filename
:确保您没有本地修改,或者您可能想合并已隐藏的文件。
(正如评论由海梅M.,对于某些壳例如tcsh,你需要逃跑的特殊字符,语法为: git checkout 'stash@{0}' -- <filename>
)
或将其保存在另一个文件名下:
git show stash@{0}:<full filename> > <newfile>
(请注意,这里
<full filename>
是相对于项目顶层目录的文件的完整路径名(认为:相对于stash@{0}
))。
如果要手动选择要从该文件应用的更改,请执行以下操作:
git difftool stash@{0}..HEAD -- <filename>
像看起来“
git checkout stash@{0} -- <filename>
”恢复文件的版本的时候,进行了藏匿-它确实不适用(只),该文件的藏匿变化。
要执行后者:
git diff stash@{0}^1 stash@{0} -- <filename> | git apply
(如评论由peterflynn,你可能需要| git apply -p1
在某些情况下,删除一个(p1
)从传统的差异路径斜线)
如注释:“ unstash”(git stash pop
),然后:
git add
)git stash --keep-index
最后一点是什么使您可以在保存其他文件的同时保留一些文件。
在“ 如何仅存储已更改的多个文件中的一个文件 ”中进行了说明。
git stash pop
由于文件冲突而无法运行,则此方法将无效。在这种情况下,Balamurugan A的回答对我有用。
unstash
意味着pop
,在我看来,在大多数情况下,这可能仅部分回答了这个问题。然后,如何在弹出的其余更改中从存储中删除选择性应用的部分,以避免以后发生冲突和/或混乱?
git checkout stash@{N} <File(s)/Folder(s) path>
例如。要仅恢复上次存储的./test.c文件和./include文件夹,
git checkout stash@{0} ./test.c ./include
-a
创建存储区时使用过的标志中。
我认为VonC的答案可能就是您想要的,但这是一种选择性的“ git apply”方法:
git show stash@{0}:MyFile.txt > MyFile.txt
checkout
任何文件。
git show stash@`{0`}:Path/To/MyFile.txt |sc Path/To/MyFile.txt
-PS不能特殊地解释花括号,必须使用反引号,这sc
是必须的,因为PS的>
运算符默认为UTF-16(实际上是UCS-2),这可能不是您想要的。@Balamurugan A的答案不会受到这些问题的困扰。
首先列出所有藏匿处
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
它也可以不使用--
但建议使用它们。看到这篇文章。
还通常将双连字符识别为停止选项解释并按字面意义对待所有以下自变量的信号。
git stash pop
引发了未跟踪文件的错误。谢谢。
如果您git stash pop
(没有冲突)将在应用后删除存储。但是,如果您git stash apply
将应用补丁而不将其从存储列表中删除。然后,您可以还原不需要的更改git checkout -- files...
git stash pop
和那里存在冲突,则必须手动修复它们,并且不会删除隐藏项。
另一种方式:
git diff stash@{N}^! -- path/to/file1 path/to/file2 | git apply -R
checkout
或show
将盲目地覆盖文件,而不仅仅是应用更改。轻描淡写是“另一种方式”。
path/to/file2
您想要与工作空间中的同一文件进行比较的。排除第二条路径对我来说很好。-使用-R
选项(“反向应用补丁”,试图修补已隐藏的版本?!),我收到一条错误消息。所以我的工作版本看起来像git diff stash@{N}^! -- path/to/file | git apply -
。
...| git apply -3 -
对于Windows用户:大括号在PowerShell中具有特殊含义。您可以使用单引号引起来,也可以使用反引号进行转义。例如:
git checkout 'stash@{0}' YourFile
没有它,您可能会收到一个错误:
Unknown switch 'e'