git 生成patch 和打入patch

转载:https://blog.csdn.net/liuhaomatou/article/details/54410361git

平时咱们在使用git 管理项目的时候,会遇到这样一种状况,那就是客户使用git 生成patch 给到咱们,那咱们就须要把客户给到patch 打入到咱们的project ,基于这样一个场景,我把git 如何生成patch 和如何打入patch 作总结app

 

生成patch 的方法:(我这里描述的生成patch 是根据commit 记录生成的)工具

1.例如首先先经过git log 查看有哪一些commit.net

 

2.把第一次commit 提交之后的(不包括第一次提交)都生成patch orm

如上图所示:使用命令:git format-patche795fefabcblog

而后生成的patch 文件以下图所示it

 

打入patch 的方法:ast

把生成的patch 文件copy 到一个文件夹中来(这里我建立了patch 文件夹)。以下图所示form

 

因为这些patch显然是用git format-patch来生成的,因此用git的工具应该就能够很好的作好。git am 就是做这件事情。file

在使用git am以前, 你要首先git am --abort 一次,来放弃掉之前的am信息,这样才能够进行一次全新的am。
否则会遇到这样的错误。
                .git/rebase-apply still exists but mbox given.

git am 能够一次合并一个文件,或者一个目录下全部的patch,以下图所示:

---------------------------------------------------------------------------------------总结:---------------------------------------------------------------------------------------------------------------------------------------------

1 使用git format-patch生成所须要的patch:
当前分支全部超前master的提交:
git format-patch -M master
某次提交之后的全部patch:
git format-patch 4e16 --4e16指的是commit名
从根到指定提交的全部patch:
git format-patch --root 4e16
某两次提交之间的全部patch:
git format-patch 365a..4e16 --365a和4e16分别对应两次提交的名称
某次提交(含)以前的几回提交:
git format-patch –n 07fe --n指patch数,07fe对应提交的名称
故,单次提交即为:
git format-patch -1 07fe
git format-patch生成的补丁文件默认从1开始顺序编号,并使用对应提交信息中的第一行做为文件名。若是使用了-- numbered-files选项,则文件名只有编号,不包含提交信息;若是指定了--stdout选项,可指定输出位置,如当全部patch输出到一个文件;可指定-o <dir>指定patch的存放目录;

 

新增:若是只想为最后第N次提交产生补丁,则能够执行下列命令:

git format-patch -N

为最后一次提交产生一个补丁:

git format-patch -1


2应用patch:
先检查patch文件:git apply --stat newpatch.patch
检查可否应用成功:git apply --check newpatch.patch
打补丁:git am --signoff < newpatch.patch

(使用-s或--signoff选项,能够commit信息中加入Signed-off-by信息)