如果你只做了少量的改动,最简单的提交方法就是把它们做成补丁(patch)用邮件发出去:
首先,使用git format-patch;例如:
$ git format-patch origin
这会在当前目录生成一系统编号的补丁文件,每一个补丁文件都包含了当前分支和 origin/HEAD 之间的差异内容。
然后你可以手工把这些文件导入你的 Email 客户端。但是如果你需要一次发送很多补丁,你可能会更喜欢使用git send-email脚本去自动完成这个工作。在发送之前,应当先到项目的邮件列表上咨询一下项目管理者,了解他们管理这些补丁的方式。
Git 也提供了一个名为 git am 的工具(am是"apply mailbox"的缩写)去应用那些通过 Email 寄来的系列补丁。 你只需要按顺序把所有包含补丁的消息存入单个的 mailbox 文件,比如说patches.mbox,然后运行
$ git am -3 patches.mbox
Git 会按照顺序应用每一个补丁;如果发生了冲突,Git 会停下来让你手工解决冲突从而完成合并。 (‘-3’选项会让 Git 执行合并操作;如果你更喜欢中止并且不改动你的工作树和索引,你可以省略‘-3’选项)
在解决冲突和更新索引之后,你不需要再创建一个新提交,只需要运行
$ git am --resolved
这时 Git 会为你创建一个提交,然后继续应用 mailbox 中余下的补丁。
最后的效果是,Git 产生了一系列提交,每个提交是原来 mailbox 中的一个补丁,补丁中的作者信息和提交日志也一并被记录下来。