如何仅固定某些文件?

我藏了我的变化。 现在我想只从存储中取出一些文件。 我怎样才能做到这一点?

如下所述 ,在“ 如何从git存储中提取单个文件(或更改为文件)? ”中,可以使用git checkoutgit show来恢复特定文件。

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

(就像Jaime M. 所说的,对于某些像tcsh这样的shell,你需要转义特殊字符,语法是: git checkout 'stash@{0}' -- <filename>

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

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

(请注意,这里<full filename>是相对于项目顶部目录的文件的完整path名(想想:相对于stash@{0} ))。

yucer 在评论中build议:

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

 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 ,从传统的diffpath中删除一个( p1 )的斜杠)

正如所评论的:“unsash”( git stash pop ),那么:

  • 添加你想保留的索引( git add
  • git stash --keep-index其余的东西: git stash --keep-index

最后一点是什么让你保留一些文件,而藏匿他人。
这在“ 如何从多个已经改变的文件中只存储一个文件 ”中说明。

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

例如。 要只从最后一个存储中恢复./test.c文件和./include文件夹,

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

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

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

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

我用过这个

 git rm --cached your/path/to/file