(四十) git 打补丁方法总结

Android 专栏收录该内容
71 篇文章 4 订阅

前言:最近在合入git库的patch的时候遇到了一些问题,总结学习一下。

 

参考:https://blog.csdn.net/liuhaomatou/article/details/54410361

 

1. 应用场景

有两个git库(同一个git库不同分支可以用cherry-pick),两个git库代码是相关联的,要有选择的定期将其中一个git库的修改merge到另外一个库中。

 

 

2.方法

准备工作:初始化两个git仓库,创建一个original.txt文件,内部写有“This is original text”,然后复制到第一个仓库和第二个仓库。修改第一个仓库中的original.txt文件,添加一行“This is modify”,修改分别提交。

 

2.1 git diff + git apply

生成patch

 

git diff 前一个提交 目标提交 > 1.patch

 

应用patch

git apply 1.patch

可以看到patch已经打上去了,但是修改信息啥的还得自己来写一下,不是很完美。

 

2.2 git format-patch+ git am 单个patch

1. 使用git format-patch生成补丁

(git format-patch -1 commitid是提取单个commitid对应的patch)

2.使用git am 应用补丁

(一般建议git am应用补丁前使用git am --abort)

可以发现这种打补丁方式会将提交信息直接都打进去,非常方便。

 

 

2.3 git format-patch+ git am 多个patch

1.生成多个patch(git format-patch commitid会生成这个commit之后的所有patch,不包含该commit)

2. 打补丁(git am *.patch可以打进去所有patch)

有冲突的话解决冲突,然后git add对应文件,git am --resolve。不能解决想后面再说就git am --skip,具体使用方法参考git am --help

 

PS:

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的存放目录;


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

  • 6
    点赞
  • 0
    评论
  • 22
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值