如何unstash只有某些文件?(How to unstash only certain files

2019-07-21 03:34发布

我藏我的变化。 现在我想unstash只能从藏匿一些文件。 我怎样才能做到这一点?

Answer 1:

正如下面提到的 ,并在详细的“ 我怎么会提取一个混帐藏匿单个文件(或对文件的更改)? ”,你可以申请使用git checkoutgit 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}

yucer建议在评论 :

如果你想改变它,你想从该文件适用于手动选择:

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 )从传统的diff路径斜线)


至于说: “unstash”( git stash pop ),则:

  • 添加要守到指数(什么git add
  • 藏匿的其余部分: git stash --keep-index

最后一点是什么让你保持一些文件,而积攒他人。
它在“说明如何藏匿只有一个文件出来已经改变了多个文件 ”。



Answer 2:

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

例如。 从去年藏匿只恢复./test.c文件和文件夹./include,

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


Answer 3:

我认为VonC的答案可能是你想要的,但这里有一个方式做一个选择“混帐应用”:

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


Answer 4:

首先列出所有的藏匿处

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

它也没有--但建议使用它们。 见这个职位。

这也是传统的认识到一个双连字符作为一个信号,停止选项的解释和字面上把后面的所有参数。



Answer 5:

如果你git stash pop (无冲突)应用后,它会删除藏匿。 但是,如果你git stash apply它将应用补丁,而不从藏匿列表中删除。 然后你就可以恢复与不必要的更改git checkout -- files...



Answer 6:

还有一个方法:

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


Answer 7:

对于Windows用户:花括号在PowerShell中的特殊含义。 您可以用单引号包围或反引号逃脱。 例如:

git checkout 'stash@{0}' YourFile

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

Unknown switch 'e'



文章来源: How to unstash only certain files?
标签: git git-stash