163

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

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

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

4

5 回答 5

195

当然,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
于 2010-01-29T08:09:17.297 回答
77

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

要将输出存储在文件中:

 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
于 2015-04-14T21:38:11.513 回答
17

采用

$> 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}

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

于 2010-01-30T08:14:58.960 回答
17

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

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

编辑

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

于 2014-10-10T12:25:09.570 回答
4

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

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

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

$git stash apply stash@{1}

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

于 2017-01-05T16:14:27.747 回答