1

我对 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 apply命令git stash,但我对正在发生的事情以及从我的补丁文件中提取非二进制文件的含义没有足够的了解。我认为有办法做到这一点。

4

2 回答 2

3

git stash save --binary myfeature2我的猜测是当我藏匿时我需要跑步。

不,这是不必要的......而且无论如何都没有选择:没有save --binary.

什么git stash提交你的工作。它只是以一种奇怪的方式执行此操作,使用两个单独的提交,其中1 个不在分支上。

只要你还有存储,你仍然有提交。

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

git stash branch newbranchname [<stash>]

当然,这要求您在具有stash 的机器上执行此操作,2但是一旦完成,您将在一个新分支上,索引与您运行时的方式相同git stash save,工作树的方式与运行时的方式相同你跑了git stash save。(新分支的当前提交也是您运行时的当前git stash save提交。)您现在可以完成git add任何未暂存的文件、git reset您不想暂存的任何文件以及git commit生成的索引(然后从更多的工作树文件,直到所有内容都安全地保存在普通的非 stash-y 提交中)。


1这两个提交是针对当前索引和工作树的。请记住,索引是您构建下一次提交的地方,通过git add-ing 和/或git rm-ing 从工作树中复制最新版本。因此, index 和 work-tree 中的一个或两个都可能与当前的commit不同,因此git stash save分别保存两者,以便以后可以单独恢复它们,如果您以后想要的话。您可以告诉它保存包含未跟踪文件或所有文件的第三次提交。

2当然,在你之前git stash branch,你应该有一个干净的索引和工作树。如果不这样做,则需要先提交或存储。如果您决定再次存储,这会将您之前的存储“提升”一个级别,所以如果它曾经stash@{2}是现在是stash@{3}。我发现保持许多 stash 处于活动状态是一种疯狂的方法:相反,提交一个新的分支。

于 2017-03-16T20:12:16.797 回答
0

至少尝试 ( git apply):

 git apply --reject mypatch.diff

此选项使其应用补丁中适用的部分,并将被拒绝的大块留在相应的*.rej文件中。

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

输出一个可以应用的二进制差异git-apply

于 2017-03-16T20:08:39.743 回答