linux patch 和 git patch

一、Linux patch 文件生成和应用

生成方式1:patch

#多文件打 patch
diff -uparN file1 file2 > xx.diff
diff -uparN folder1 folder12 > xx.diff
-------------------------------------------------------
diff --help
-u 显示有差异行的前后几行(上下文), 默认是前后各 3 行, 这样, patch 中带有更多的信息
-p <剥离层级>或--strip=<剥离层级>  设置欲剥离几层路径名称。
-a 逐行比较文本文件
-r 递归
-N 将新添加的文件全新打印出来作为新增的部分。
   如果不使用N,只简单提示缺少文件。

生成方式2:quilt 是一个制作和应用补丁的工具,它适合于管理较多补丁

sudo apt-get install quilt
#分四步生成patch:
	quilt new xxx.patch
	quilt add file1 file2 ...
	修改文件 file1 file2 ...
	quilt refresh -pab
#########################
quilt --help
	quilt new				#创建新补丁文件
	quilt add {files}   	#关联文件
	quilt remove files  	#取消关联文件,是add相反的操作
	quilt refresh           #修改完成后,将修该记录更新至补丁中
	quilt top      			#查看最近的一个patch
	quilt diff    			#查看对比修改的内容
	quilt files       		#查看当前patch关联的文件
	quilt series      		#查看左右的patch
	quilt pop     			#回退刚才文件的改动

应用 patch

# p数字:表示跳过几级目录,0 标识不去掉为全路径,3 标识去掉第3层路径 ...
patch -p3 < xx.patch

取消补丁 patch

patch -RE -p0 < xx.patch
patch --help
		# -R  --reverse
		# -E --remove-empty-files


二、Git patch

根据是否含有 commit 信息,Git 提供了两种补丁方案:

不含commit信息: git diff 生成的 .diff

git diff file1   > xxx.patch     #单个文件
git diff <r1>..<r2>  >  xxx.patch  #两个commit间的修改的patch

# 所有修改文件打成 patch
git diff > xxx.patch

# 检查 patch
git apply --stat  xxx.patch  # 查看patch的情况
git apply --check xxx.patch  # 检查patch是否能够打上,如果没有任何输出,则说明无冲突,可以打上

# 应用patch
git apply xxx.patch  #可能有冲突
git apply --reject xxx.patch #有冲突时,发生冲突的部分会保存为.rej文件,未发生冲突的部分会成功打上patch
vi  xx.rej  #修改rej文件,解决冲突

含commit信息: git format-patch 生成的 .patch 文件

git format-patch HEAD^       #生成最近的1次commit的patch
git format-patch -1          #生成最近的1次 等同上一条

git format-patch HEAD^^      #生成最近的2次commit的patch
git format-patch -2          #生成最近的2次 等同上一条

git format-patch HEAD^^^     #生成最近的3次commit的patch
git format-patch -3          #生成最近的3次 等同上一条

git format-patch HEAD^^^^    #生成最近的4次commit的patch
git format-patch -4          #生成最近的4次 等同上一条

git format-patch <r1>..<r2>  #生成两个commit间的修改的patch(生成的patch不包含r1. <r1>和<r2>都是具体的commit号)
git format-patch <r1>        #生成某commit以来的修改patch(不包含该commit)

git format-patch --root <r1> #生成从根到r1提交的所有patch


# 应用patch
git am -3 --signoff xxx.patch  # -3 让 Git 更智能地处理冲突;添加-s或者--signoff,添加本机git信息到为signed off by;
git am -3 -i ~/path/*.patch    #多个patch;-i 交互模式选项: Apply? [y]es /[n]o /[e]dit /[v]iew patch /[a]ccept all
git am --abort              # 废弃上一条am命令已经打了的patch
#有冲突时:
git apply --reject xxx.patch #有冲突时,发生冲突的部分会保存为.rej文件,未发生冲突的部分会成功打上patch
vi  file1.rej  #修改rej文件,解决冲突
git add file1
git am --resolved           # 告知冲突已解决完

参考链接:
Git 补丁 patch 使用方法
https://blog.csdn.net/u013318019/article/details/114860407

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值