当我们想把自己的成果发给别人 review 时,除了在 github 上提交 pull request,还有一种更加古老的方法, 那就是把自己的提交记录打包成 patch,并通过电子邮件发送出去。

比如,我们想把当前分支前三个提交记录打包成 patch,我们可以这样做:

$ git format-patch -3

0001-post-update-the-post-math-notation-markdown.patch
0002-test-comment-function.patch
0003-add-comment-function.patch

命令会生成三个文件,对应你的三次提交记录。值得注意的是,文件开头的数字和 提交记录的顺序是相反的,即 0003-add-comment-function.patch 实际上是你最近 的一次提交记录。所以你在下面用 git am 或 git apply 应用 patch 的时候,应该 从 0001 开始。

在你通过电子邮件发送给别人的后,他可以用 git amgit apply 两种方式来 把你修改的内容应用到他的分支上。这两个命令的区别是,git am 会自动生成一条 提交记录,相当于你使用了 git addgit commit,而 git apply 则只会修改 相应的文件,并不生成提交记录。

补充一点,git rebase 的原理也与 patch 有关。当你 rebase 的时候,git 其实是 将当前分支与 rebase 分支不同的提交记录变成若干 patches,然后再将 patches 应用到 rebase 分支上。

以上。