【发布时间】:2010-01-29 08:07:21
【问题描述】:
在 git 中,我隐藏了我的更改。有没有可能我可以用我藏起来的东西创建一个补丁?然后将该补丁应用到其他存储库(我同事的)?
我知道git format-patch -1,但我认为这是为了我的承诺。但我正在为我隐藏的更改寻找相同的东西。
我如何在其他存储库中应用补丁?
【问题讨论】:
在 git 中,我隐藏了我的更改。有没有可能我可以用我藏起来的东西创建一个补丁?然后将该补丁应用到其他存储库(我同事的)?
我知道git format-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
【讨论】:
man patch,但没有看到交互式补丁应用程序的任何选项。然而,由于补丁文件本身是纯文本文件,通常人们会在文本编辑器中编辑补丁以剪掉相关部分以使用patch 应用。或者,如果您将补丁应用到另一个 Git 存储库,您可以将其全部应用,然后有选择地应用您不想更改的 git checkout 文件(带有文件名的git checkout 会丢弃未暂存的更改)。
git add --interactive ${YOUR_FILES},它会让你有机会部分提交。
git stash show -p stash@{1} > patch.txt
此答案提供有关保存补丁和将其应用到您想要使用它的位置的信息。
将输出存储在文件中:
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
git apply 没有选择差异。
使用
$> 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}
然后您可以发布此分支,您的同事可以合并或挑选该提交。
【讨论】:
上述解决方案不适用于二进制数据。 下面添加对它的支持:
git stash show stash@{0} -p --binary
编辑
注意:我只是想对以上回复添加评论,但我的声誉还不够。
【讨论】:
我相信这可能是 Git 最近的更新之一。您不必再修补隐藏的更改。您可以将隐藏在一个分支上的更改应用到另一个分支。
假设您在分支 A 上隐藏了一些更改,称为 stash@{1}。
你现在切换到分支 B。你可以这样做:
$git stash apply stash@{1}
这会将您的分支 A 更改应用到分支 B。
【讨论】: