最近在维护的一个项目,突然转移到了内网,不能直接用git pull命令进行更新了,手动替换的话,又不太方便,运用diff命令进行打包,批量替换的话,对于每次的修改日志又没办法统一的很好,于是想到git生成补丁和打补丁这个操作

生成补丁

对于生成补丁,比较简单,基本也不会发生太大的问题,就记录几条简单的命令

//生成某次提交之后的补丁
git format-patch COMMIT-ID
//生成某次提交之后,n = 1时获取当前提交的补丁
git format-patch -n COMMIT-ID

format-patch默认生成补丁的编号是从1开始,后面追加 –start-number=NUMBER 命令,可以生成指定编号

准备好生成的补丁,就可以转移到内网环境,进行打补丁操作了~

应用补丁

打补丁命令如下:

//查看补丁中的信息修改
git apply --stat PATH-FILE
//检查是否能应用成功
git apply --check PATH-FILE
//应用补丁
git am PATH-FILE

应用补丁成功后,会直接显示补丁的commit信息,如果发生冲突的话,会输入以下信息

如果发生这种情况的话,可以执行如下命令

git apply --reject PATH-FILE

git会先将补丁中的未冲突部分,进行合并,然后对于冲突的文件,会生成同目录下,同名的.rej文件,文件中可以查看变动记录
对比文件后,将修改文件提交到暂存区,然后执行

git am --continue

就可以将补丁成功进行应用

运用这种方式,就可以保证我在本地和内网环境中的commit信息保持一致,同时,如果在内网维护时出现的问题,也可以直接生成补丁,应用到本地中,大大提高了代码的可维护性