2014-10-03 167 views
6

远程工作时我无法推送,所以我想从尚未推送到我的开发分支上的所有提交中创建一个单一补丁来发送电子邮件。我怎么做?git从unpushed提交创建补丁

+0

绝对不可能重复[Viewing Unpushed Git Commits](http://stackoverflow.com/questions/2016901/viewing-unpushed-git-commits) – d33tah 2014-10-03 10:37:51

+1

该线程只回答如何查看unpushed提交,没有说从他们那里创建一个补丁 – Kosmotaur 2014-10-05 20:29:50

回答

10

git format-patch <commit-ish>为自指定提交以来所做的每次提交创建一个补丁文件。

因此,要导出所有unpushed提交,简单地说

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一起使用。


旁注:
一个更容易(和更强大的)事情可能是,让您的回购协议的副本在闪存棒或similiar。然后将拇指驱动器设置为遥控器(git remote add thumb /media/thumbdrive),然后将其提交给它(git push thumb master),然后返回公司时,从驱动器拉出并推到原点。

+0

谢谢,那就是我正在寻找的 顺便说一句,在OS X上'date'事实证明不能识别'-I'选项,所以我只是打电话给我的补丁'foo.patch',幸福的日子 – Kosmotaur 2014-10-05 20:28:42

+0

很高兴知道,我已经习惯使用'$(date -I)'遍布各处:) – cfstras 2014-10-06 08:32:43

3

相反的creating a patch,你可以创建一个bundle(意为代表的git回购,从中你就能拉的文件)。
就你而言,需要一个incremental bundle

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

那时数量要摆在那束天更换x:不要害怕把“太迈恩”天在回购:有人从你的包克隆将只得到新的提交,而不是他/她在当地回购中已经拥有的那个。

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