如何仅固定某些文件?
我藏了我的变化。 现在我想只从存储中取出一些文件。 我怎样才能做到这一点?
如下所述 ,在“ 如何从git存储中提取单个文件(或更改为文件)? ”中,可以使用git checkout
或git 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