题
我想知道如果这是可以提取一个单一的文件或差异的文件从一个混帐藏匿而出现的藏匿集关闭。
可能任何人都可以提供一些建议/意见吗?
解决方案
在所述 GIT中的变化藏手册页可以读取(“讨论”一节中,只是“选项”的描述之后)的是:
一个藏匿被表示为一个提交其树记录的状态 工作目录,它的第一个父是头在提交 藏匿已创建。
因此可以治疗藏匿(例如stash@{0}
是第一/最上面的藏匿),为合并提交,并使用:
$ git diff stash@{0}^1 stash@{0} -- <filename>
说明:stash@{0}^1
意味着给定的藏匿,其如在说明中指出上面是提交在该变化卷走的第一个亲本。我们用这种形式的“git的差异”(有两次提交),因为stash@{0}
/ refs/stash
是一个合并提交,我们必须告诉我们要diff的反对哪一方饭桶。更隐蔽:
$ git diff stash@{0}^! -- <filename>
也应该工作(见 GIT中REV-解析手册页为rev^!
的解释语法,在 “指定范围” 部分)。
同样地,可以使用 GIT中结帐以检查单个文件出藏匿的:
$ git checkout stash@{0} -- <filename>
或将其保存在另一个文件名:
$ git show stash@{0}:<full filename> > <newfile>
或
$ git show stash@{0}:./<relative filename> > <newfile>
(注的是,这里<完整文件名>是相对于项目的顶级目录中的文件的全路径名(认为:相对于stash@{0}
))
您可能需要保护stash@{0}
从壳膨胀,即使用"stash@{0}"
或'stash@{0}'
。
其他提示
如果您使用git stash apply
而不是git stash pop
,将藏匿适用于你的工作树,但仍保持藏匿。
通过这个工作,你可以add
/ commit
你想要的文件,然后重新设置剩余的变化。
短的答案
要看到整个文件:git show stash@{0}:<filename>
要请参见diff:git diff stash@{0}^1 stash@{0} -- <filename>
有一个简单的方式来获得从任何分支的变化,包括储物箱:
$ git checkout --patch stash@{0} path/to/file
如果要修补许多地方您可以省略文件规范。或省略补丁(而不是路径)来获取所有更改到一个文件中。与藏匿数量从0
更换git stash list
,如果你有一个以上的。请注意,这就像diff
,并提供适用的所有的分支之间的差异。若要从只有一个提交/藏匿的变化,看看git cherry-pick --no-commit
。
$ git checkout stash@{0} -- <filename>
注:
确保你 把空间后"--" 和文件名参数
替换零(0)的具体隐藏的数量。得到储藏列表中,使用:
git stash list
基于上 雅各布*Narębski的答案 --较短的版本
您可以得到与“git show stash@{0}
”藏匿的差异(或任何藏匿的数量;请参阅“混帐藏匿名单”)。可以很容易地提取DIFF的部分为一个单一的文件。
最简单的概念来理解,虽然也许不是最好的,就是你有三个文件更改,您希望藏匿一个文件。
如果你git stash
藏匿所有这些,git stash apply
到回来再领他们,然后git checkout f.c
对有问题的文件,以有效地重置。
当你想unstash该文件运行做了git reset --hard
,然后再次运行git stash apply
,趁着国税发事实git stash apply
不清除藏匿堆栈差异。
如果该文件藏匿需要与当前版本进行合并,以便使用使用DIFF以前的方式。否则,你可能会使用git pop
为unstashing他们,git add fileWantToKeep
分期您的文件,并做了git stash save --keep-index
,为积攒除了什么是舞台上的一切。
请记住,这种方式与以前的不同之处在于它“啪啪”从藏匿文件。以前的答案保持git checkout stash@{0} -- <filename>
如此这般根据您的需求。