从git stash中提取非二进制文件

时间:2017-03-16 19:58:33

标签: git git-stash git-apply

我对git很新。在我跑的一台电脑上

git stash save myfeature
git stash show -p > myfeaturepatch

我将myfeaturepatch复制到另一台计算机并运行

git apply myfeaturepatch

我做了一些更改,包括添加一些字体文件(二进制文件),然后运行

git stash save myfeature2
git stash show -p > myfeaturepatch2

当我尝试将第二个版本应用到我的第一台计算机时,我得到了

error: cannot apply binary patch to 'myfont.ttf' without full index line

我的猜测是,当我藏匿时,我需要运行git stash save --binary myfeature2。不幸的是,由于git stash删除了保存到文件的更改,并且由于上述错误我无法将修补程序应用于任何一台计算机,因此我目前无法访问所做的更改。

我已经尝试了一系列不同的git applygit stash命令,但我对已经发生的事情以及参数的含义没有足够的理解。我的补丁文件中的二进制文件。我认为有办法做到这一点。

2 个答案:

答案 0 :(得分:2)

  

我的猜测是,当我藏匿时,我需要运行git stash save --binary myfeature2

不,这是不必要的......无论如何都不是一个选项:没有save --binary

git stash做的是提交您的工作。它只是以一种奇怪的方式执行此操作,使用 no 分支上的两个单独的提交 1

只要你还有藏匿,你仍然有提交。

处理您仍然拥有的存储的最简单方法是将其转换为新分支上的普通提交:

git stash branch newbranchname [<stash>]

当然,这需要你在 藏匿的机器上执行它, 2 但是一旦完成,你就在一个新的分支上,索引是运行git stash save时的工作方式,以及运行git stash save时工作树的方式。 (新分支的当前提交也是当您运行git stash save当前的提交。)您现在可以完成git add任何未分段的文件,git reset您不想要暂存的任何文件,以及git commit生成的索引(然后从更多工作树文件中提交更多提交,直到所有内容安全地保存在普通的非存储中提交)。

1 这两个提交用于当前的索引和工作树。请记住,索引是您构建下一个提交的位置,通过git add - 和/或git rm来复制工作树中的最新版本。因此,索引和工作树中的任何一个或两者都可以与当前的提交不同,因此git stash save可以单独保存两者,以便以后可以单独还原它们,如果您需要后来。您可以告诉它保存包含未跟踪文件或所有文件的第三个提交。

2 当然,在你git stash branch之前,你应该有一个干净的索引和工作树。如果不这样做,则需要先提交或存储。如果你决定再次藏匿,这会推动你之前的藏匿行为&#34; up&#34;一级,所以如果它曾经是stash@{2},现在是stash@{3}。我发现保持许多活动状态是疯狂的一个因素:相反,提交一个新的分支。

答案 1 :(得分:0)

至少尝试(git apply):

 git apply --reject mypatch.diff
  

此选项使其应用适用的修补程序部分,并将拒绝的数据保留在相应的*.rej文件中。

当您制作补丁(git diff)时,请将--binary选项添加到:

  

输出可以与git-apply一起使用的二进制差异。