【问题标题】:How can I format patch with what I stash away如何用我藏起来的东西格式化补丁
【发布时间】:2010-01-29 08:07:21
【问题描述】:

在 git 中,我隐藏了我的更改。有没有可能我可以用我藏起来的东西创建一个补丁?然后将该补丁应用到其他存储库(我同事的)?

我知道git format-patch -1,但我认为这是为了我的承诺。但我正在为我隐藏的更改寻找相同的东西。

我如何在其他存储库中应用补丁?

【问题讨论】:

    标签: git git-stash git-patch


    【解决方案1】:

    当然,git stash show 支持这个:

    git stash show -p
    

    所以,使用

    git stash list
    

    找出要导出为补丁的存储编号,然后

    git stash show -p stash@{<number>} > <name>.patch
    

    导出它。

    例如:

    git stash show -p stash@{3} > third_stash.patch
    

    【讨论】:

    • 我有一个关于应用补丁的相关问题。假设我的补丁涉及多个文件。有没有办法“交互式”地应用补丁?选择我应该针对哪些补丁文件应用补丁?我可以这样做吗?
    • @silverburgh:我快速浏览了man patch,但没有看到交互式补丁应用程序的任何选项。然而,由于补丁文件本身是纯文本文件,通常人们会在文本编辑器中编辑补丁以剪掉相关部分以使用patch 应用。或者,如果您将补丁应用到另一个 Git 存储库,您可以将其全部应用,然后有选择地应用您不想更改的 git checkout 文件(带有文件名的git checkout 会丢弃未暂存的更改)。
    • @silverburgh 您可以限制使用 git apply 的“--exclude”和“--include”参数修补的文件集。
    • @silverburgh 假设您有补丁,您可以执行以下操作。完全应用补丁,然后执行git add --interactive ${YOUR_FILES},它会让你有机会部分提交。
    • 谢谢。这对我有用:git stash show -p stash@{1} &gt; patch.txt
    【解决方案2】:

    此答案提供有关保存补丁和将其应用到您想要使用它的位置的信息。

    将输出存储在文件中:

     git stash show -p --color=never > my-patch-name.patch
    

    验证补丁看起来不错:

    git apply --stat my-patch-name.patch
    

    验证没有错误:

    git apply --check my-patch-name.patch
    

    应用补丁

    git apply my-patch-name.patch
    

    【讨论】:

    • 这个对我有用纯文本代码文件,但我必须考虑空白。验证补丁看起来不错:git apply --check --ignore-space-change --ignore-whitespace my-patch-name.patch 应用补丁:git apply --ignore-space-change --ignore-whitespace my-patch-name.patch
    • 简洁明了的解释。为了让它工作,我在应用补丁时必须在 repo 根目录中,否则 git apply 没有选择差异。
    【解决方案3】:

    使用

    $> git stash list
    stash@{0}: WIP on master: 84fx31c Merged with change to /public/
    stash@{1}: WIP on master: 463yf85 FlupResource: also takes json as a query parameter
    

    获取您最近存放的东西的列表。 Git 实际上会在您存储时创建提交对象。

    它们和其他所有东西一样都是提交。您可以在分支中查看它们:

    $> git checkout -b with_stash stash@{0}
    

    然后您可以发布此分支,您的同事可以合并或挑选该提交。

    【讨论】:

      【解决方案4】:

      上述解决方案不适用于二进制数据。 下面添加对它的支持:

      git stash show stash@{0} -p --binary
      

      编辑

      注意:我只是想对以上回复添加评论,但我的声誉还不够。

      【讨论】:

        【解决方案5】:

        我相信这可能是 Git 最近的更新之一。您不必再修补隐藏的更改。您可以将隐藏在一个分支上的更改应用到另一个分支。

        假设您在分支 A 上隐藏了一些更改,称为 stash@{1}。

        你现在切换到分支 B。你可以这样做:

        $git stash apply stash@{1}
        

        这会将您的分支 A 更改应用到分支 B。

        【讨论】:

          猜你喜欢
          • 2023-03-09
          • 2023-01-22
          • 2018-07-07
          • 2020-10-29
          • 2019-12-04
          • 1970-01-01
          • 1970-01-01
          • 2011-09-17
          • 2011-01-21
          相关资源
          最近更新 更多