【问题标题】:how to do an export for git stash如何为 git stash 进行导出
【发布时间】:2017-11-08 15:23:24
【问题描述】:

我想将我在存储列表中看到的一个存储(更改)导出到.zip/.gz 文件中。我找到了以下命令:

git stash show -p > patch

将更改保存在文件中,但我也想保留.png 文件等...我正在寻找一种方法来压缩 all 中包含的更改一个文件或一个文件夹。你知道有什么解决办法吗?

【问题讨论】:

标签: git


【解决方案1】:

尝试使用--binary 选项导出

git stash show -p --binary > changes.patch

当你想导入它时,应用补丁

git apply changes.patch

【讨论】:

    【解决方案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 上重新创建,如果您愿意,可以将其重新存储在那里。

    如果您需要在接收端直接将更改实现为存储,而无需通过您的工作树和索引 - 例如因为接收方不处于“干净”状态 - 您可以使用捆绑包来做到这一点。但是有一个技巧可以使这项工作。在源代码库上

    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 引用从包中取出。如果我们将它直接映射到 refs/stash,那么我们就不能指望创建一个 reflog 条目 - 如果没有 reflog 条目,它就不是一个可用的 stash。因此,我们将其引入临时分支,然后使用 update-ref 创建(或移动)stash 引用并更新 reflog。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 2023-02-08
      • 2019-03-05
      • 2013-09-15
      • 2014-03-11
      • 1970-01-01
      • 2017-11-25
      相关资源
      最近更新 更多