我想在.zip/.gz
文件中导出我在隐藏列表中看到的一个存储(更改)。我找到了以下命令:
git stash show -p > patch
保存文件中的更改,但我还想保留.png
个文件等...我正在寻找一种方法来压缩所有包含的更改存储在文件或文件夹中。你知道任何解决方案吗?
答案 0 :(得分:2)
虽然Samual Robert的回答确实解决了所述问题,但需要注意:
git stash show
会将所有暂存和未暂存的更改合并到一个补丁中,即使您使用了git stash -u
,也会排除未跟踪的文件。默认情况下,git apply
会将修补程序中的所有更改变为未分阶段的更改;你可以通过提供--index
选项让它们上演。但是为了保持暂存和非暂存更改之间的区别,或者包含存储中未跟踪的文件,您需要执行其他操作。
存储内部由两个或三个提交和一些ref操作组成,因此一个选项是从每个提交生成一个补丁,然后在另一端手动重建存储。由于提交的相关方式,获得正确的补丁需要一点点诀窍。
git show stash^2 --binary >index.patch
git show stash^3 --binary >untracked.patch
git diff --binary stash^2 stash >wip.patch
然后在接收端
git apply index.patch
git add .
git apply wip.patch
git apply untracked.patch
现在已经在另一个repo上重新创建了未提交的状态,如果你想要,你可以在那里重新存储它。
如果您需要直接在接收端实现更改作为存储,而无需通过您的工作树和索引 - 例如因为接收方不在"清洁" state - 你可以使用bundle来做。但是有一个技巧可以使这项工作。在源仓库
git bundle create stash.bundle stash^..stash
在接收回购
上git remote add bundle stash.bundle
git fetch stash:temp
git update-ref --create-reflog refs/stash temp
git branch -D temp
请注意,我们必须提供一个明确的refspec来从包中获取stash
ref。如果我们将它直接映射到refs / stash,那么我们就无法依赖正在创建的reflog条目 - 如果没有reflog条目,它就不是可用的存储。因此,我们将其引入临时分支,然后使用update-ref
创建(或移动)stash
引用并更新reflog。
答案 1 :(得分:1)
尝试使用--binary
选项导出
git stash show -p --binary > changes.patch
如果要导入它,请应用修补程序
git apply changes.patch