使用git生成patch文件

November 29th, 2015 by JasonLe's Tech Leave a reply »

经过两个月的奋战,我的找工作之旅告于段落,博客也荒废了,现在开始逐渐更新…

之前与CRIU团队交流的时候,团队成员发给我一个patch,让我打在git master分支上,直接使用。我当时还没有意识到可以使用git am命令,傻乎乎的使用patch < 操作patch,费力不讨好。。。

$git am -3 -i xxx.patch
Commit Body is:
--------------------------
commit message....
--------------------------
Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all  y
applied: commit message....

但是这个文件文件是如何生成的呢?其实也非常简单,只需要使用git format-patch 命令即可生成,其中 -1 就是以HEAD指针为基准的几个commit提交打成patch,非常类似于HEAD^ 或者是HEAD^^:

$git format-patch -1

这个时候在git目录下,生成0001-commit-message.patch类型的patch,如果使用vim打开看的话,可以发现除了常规的patch文件,还存在git commit 信息,这些信息比起单纯的diff命令多了一些内容,可以被合并到git分支中。

如果我们使用git am 合并失败的话,会进入单步执行模式如果我们要退出这次合并,直接使用git am –abord,然后就可以再次使用git am进行合并。如果我们没有退出这个模式,再次使用am合并,会出现下面的错误提示信息,在.git/rebase-apply/ 中存在文件,如果am成功,则这个文件不存在。

.git/rebase-apply still exists but mbox given.

如果你发现这个冲突是无法解决的, 要撤销整个am的东西。 可以运行git am –abort,如果你想只是忽略这一个patch,可以运行git am –skip来跳过这个patch.

 

 

参考:

http://blog.csdn.net/xzongyuan/article/details/9425739
http://blog.csdn.net/wh_19910525/article/details/19416857

Documentation/SubmittingPatches