【问题标题】:git create patch from unpushed commitsgit 从未推送的提交创建补丁
【发布时间】:2014-11-28 09:27:38
【问题描述】:

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

【问题讨论】:

  • Viewing Unpushed Git Commits 的可能重复项
  • 绝对不是,该线程只回答如何查看未推送的提交,并没有说明如何从它们创建补丁

标签: git patch


【解决方案1】:

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

因此,要导出所有未推送的提交,只需输入

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


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

【讨论】:

  • 谢谢,这正是我一直在寻找的顺便说一句,在 OS X 上 date 原来无法识别 -I 选项,所以我只调用了我的补丁 foo.patch,快乐的日子
  • 很高兴知道,我已经习惯在任何地方使用$(date -I) :)
【解决方案2】:

您可以创建一个 bundle(表示代表 git 存储库的文件,您可以从中提取)而不是 creating a patch
在您的情况下,需要incremental bundle

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

替换 x 到那时您想放入该捆绑包的天数:不要害怕在该回购中放入“太可能”天:从您的捆绑包中克隆的人只会获得新的提交,而不是他/她已经在本地仓库中拥有一个。

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

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2011-07-06
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多