git从未提交的提交创建补丁

Kos*_*aur 8 git patch

我无法在远程工作时推送,因此我想从尚未推送到我的开发分支的所有提交中创建一个补丁,以通过电子邮件发送它.我怎么做?

cfs*_*ras 14

git format-patch <commit-ish> 为指定提交后的每个提交创建一个补丁文件.

因此,要导出所有未删除的提交,只需输入即可

git format-patch origin/master -o patches/
Run Code Online (Sandbox Code Playgroud)

并将所有这些输出到patches/目录中.

如果您想拥有一个文件,请添加--stdout:

git format-patch origin/master --stdout > patches_$(date -I).patch
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为patches_2014-10-03.patch(或其他日期)的文件,其中包含所有补丁.注意: patch或其他简单的补丁应用程序无法处理生成的文件.它只适用于git am.


旁注:
更容易(更强大)的事情可能是将您的回购副本保存在拇指驱动器上或类似.然后将thumbdrive设置为remote(git remote add thumb /media/thumbdrive),将提交推送到它(git push thumb master),当你回到公司时,从驱动器拉出并推到原点.


Von*_*onC 5

您可以创建一个捆绑包(即代表 git 存储库的文件,您可以从中拉取),而不是创建patch 。 在您的情况下,需要增量捆绑。

git bundle create ../yourRepo.bundle" --since=x.days.ago --all
Run Code Online (Sandbox Code Playgroud)

代替x为您想要放入该捆绑包中的天数:不要害怕在该存储库中放入“太可能”的天数:从您的捆绑包中克隆的人将仅获得新的提交,而不是他/她已经拥有的提交在本地仓库中。

捆绑包是单个文件,就像补丁一样,但可以用作 Git 存储库:易于复制且易于使用(作为常规 Git 存储库)。
如果您唯一的用途是通过从远程存储库(您无法直接推送)完成提交来完成本地存储库,那么这比补丁更容易。