从未推送的提交中创建git补丁

14

在远程工作时,我无法进行推送操作,因此我希望能够从我的 develop 分支中尚未推送的所有提交中创建一个单独的补丁并通过电子邮件发送它。我该如何做到这一点?


可能是查看未推送的Git提交的重复问题。 - d33tah
5
绝对不行,那个帖子只回答了如何查看未推送的提交,没有提到如何从它们创建补丁。 - Kosmotaur
2个回答

18

git format-patch <commit-ish> 命令可以为自指定提交(commit)以来的每个提交(commit)创建一个补丁文件(patch file)。

因此,要导出所有未推送的提交(commit), 只需执行以下命令:

git format-patch origin/master -o patches/

所有这些都将输出到patches/目录中。

如果您想要一个单个文件,请添加--stdout

git format-patch origin/master --stdout > patches_$(date -I).patch

执行该命令将创建一个名为 patches_2014-10-03.patch(或其他日期)的文件,并在其中包含所有补丁。 注意:patch 或其他简单的补丁应用程序无法处理生成的文件。它只能使用 git am


附注:
更简便(也更稳定)的做法可能是将您的存储库备份到闪存驱动器或类似设备上。然后将闪存驱动器设置为远程 (git remote add thumb /media/thumbdrive),将您的提交推送到其中 (git push thumb master),当回到公司时,从驱动器中拉取并推送到源。


谢谢,这正是我要找的。 顺便说一下,在OS X上,“date”命令似乎无法识别“-I”选项,所以我只是将我的补丁命名为“foo.patch”,真是美好的一天。 - Kosmotaur
好知道,我已经习惯在任何地方使用 $(date -I) 了 :) - cfstras

5

不要创建补丁,你可以创建一个bundle(表示一个代表git存储库的文件,从中你将能够拉取)。 在你的情况下,需要一个增量捆绑包

git bundle create ../yourRepo.bundle" --since=x.days.ago --all

x替换为您想要放入该包中的天数:不要担心在该存储库中放入“太多”天:从您的捆绑包克隆的人将仅获得新提交,而不是他/她已经在本地存储库中拥有的提交。
捆绑包是一个单独的文件,类似于补丁,但可以用作Git存储库:易于复制和使用(作为常规Git存储库)。 如果您唯一的用途是使用来自远程存储库的提交完成本地存储库(无法直接推送到其中),则比补丁更容易。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接