git am, git apply, git format-patch,git diff 用法

传统的patch可能会丢失一些信息,git 提供两种打patch方法, git diff ,

git format-patch,两种的区别在于前者打出来的patch中不带有提交信息,

后者打出来的patch带有提交信息,使用起来更加方便, 但是git format-patch对补丁要求比较严格,

遇到一些冲突就无能为力了,git 提供了一套很好的机制,配合使用git format-patch 和git apply 进行打补丁,

将事半功倍

 

下面举例说明git 补丁的用法.

1 git apply , git diff 的用法

 

> git diff commit1 commit2 > ~/patch   将commit1~commit2 之间的提交打成补丁.
> 
> git apply ~/patch  合并补丁到代码库

 

当然在合并的时候有冲突,会提示失败,可以 --reject解决

> git apply --reject ~/patch

  这时候会生成一些xxx.rej的文件,就是冲突的地方,不能合并进库,没有冲突的地方都会合并到库中,根据xxxx.rej 解决冲突, 删除xxx.rej,就可以重新提交了

 

注意上使用git diff 产生的补丁没有提交信息,要重新提交,通过git apply 打进来的代码,都是相当于新写的代码,可能会比较麻烦,要想生成带有提交信息的补丁,就应该用git format-patch生成补丁

> git format-patch commid1 commid2

 将commit1~commit2 之间的提交打成补丁.如果相差多条提交 会生成多个补丁,当然也可以合并生成1个补丁 补丁的形式类似于0001-130-sync-disable-Blur.patch 是不是很清晰(还有其他的参数,自行查阅)

> git am 0001-130-sync-disable-Blur.patch

 进行打补丁,这个就类似于cherry-pick了

当然也可能产生冲突 冲突信息类似下面这样

> 正应用:130-sync: disable Blur
> 
> error: 打补丁失败:src/com/xx/xx/xx/xx/xxx/XXX.java:293
> 
> error: src/com/xx/xx/xx/xx/xx/XXX.java:补丁未应用
> 
> 补丁失败于 0001 130-sync: disable Blur
> 
> 失败的补丁文件副本位于:
> 
>    /home/tlinux/ex2/xxx/xxx/xxx/xx/xxx/.git/rebase-apply/patch
> 
> 当您解决了此问题后,执行 "git am --continue"。
> 
> 如果您想跳过此补丁,则执行 "git am --skip"。
> 
> 要恢复原分支并停止打补丁,执行 "git am --abort"。

 

上面的信息很清楚 在/home/tlinux/ex2/xxx/xxx/xxx/xx/xxx/.git/rebase-apply/patch 位置生成了一个path,这个path就是git diff 格式的path,然后就可以通过git apply --reject进行打补丁,

解决冲突后,执行

> git am --continue

,带有提交信息的补丁就打好了,可以直接提交了
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值