git 生成多个patch_详解如何使用git 生成patch 和打入patch

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

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

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

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

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

然后生成的patch 文件如下图所示

打入patch 的方法:

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

由于这些patch显然是用git format-patch来生成的,所以用git的工具应该就可以很好的做好。git am 就是作这件事情。

在使用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

2应用patch:

先检查patch文件:git apply --stat newpatch.patch

检查能否应用成功:git apply --check newpatch.patch

打补丁:git am --signoff < newpatch.patch

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

如果应用patch出现问题:

比如,一个典型的git am失败,可能是这样的:

$ git am PATCH

Applying: PACTH DESCRIPTION

error: patch failed: file.c:137

error: file.c: patch does not apply

error: patch failed: Makefile:24

error: libavfilter/Makefile: patch does not apply

Patch failed at 0001 PATCH DESCRIPTION

When you have resolved this problem run "git am --resolved".

If you would prefer to skip this patch, instead run "git am --skip".

To restore the original branch and stop patching run "git am --abort".

正如你所见,如果冲突发生,git只是输出上述信息,然后就停下来。一个小冲突会导致整个patch都不会被集成。

处理这种问题的最简单方法是先使用 git am --abort,然后手动的添加此patch, patch -p1 < PATCH,手动解决掉代码冲突,最后使用 git commit -a 提交代码。但是这样做有个问题就是你会失去PATCH中原本包含的commit信息(比如From,Date,Subject,Signed-off-by等)。应该有一种更聪明的方法。

在 .git/rebase-apply 目录下,存放着相应的补丁文件,名字是“0001” (在更新的git版本中,存放补丁文件的目录名有所改变,这里使用的git版本是 1.7.4.1)。

事实上,你可以使用 git apply 命令打patch(git apply 是git中的patch命令)。如同使用 patch -p1 命令时一样,然后手动解决代码冲突(检视生成的 .rej 文件,与冲突文件比较,修改冲突内容,并最终把文件加入到index中):

$ git apply PATCH --reject

$ edit edit edit

(译注:根据.rej文件手动解决所有冲突)

$ git add FIXED_FILES

$ git am --resolved

就这么简单!

想多一些解释,好吧。git am 并不改变index,你需要使用 git apply --reject 打patch(保存在 .git/rebase-apply),手动解决代码冲突,(译注:使用 git status 列出所有涉及文件),把所有文件(不仅仅是引起冲突的文件)添加到(git add)index,最后告诉 git am 你已经解决(--resolved)了问题。这样做的好处是你不需要重新编辑commit信息。而且,如果你正在打的是一系列patch(就是说你在打的是多个patch,比如 git am *.patch)你不需要使用 git am --abort,然后又 git am。

参考资料:

到此这篇关于详解如何使用git 生成patch 和打入patch的文章就介绍到这了,更多相关git 生成patch 和打入patch内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java集合工具类的一些坑,Arrays.asList()、Collection.toArray()...

Arrays.asList() 使用指南 最近使用Arrays.asList()遇到了一些坑&#xff0c;然后在网上看到这篇文章&#xff1a;Java Array to List Examples 感觉挺不错的&#xff0c;但是还不是特别全面。所以&#xff0c;自己对于这块小知识点进行了简单的总结。 简介 Arrays.asList()…

python saltstack web_saltstack学习-8:web管理页面(halite)

安装halite方法一&#xff1a;失败&#xff0c;待查原因1、安装并启动salt-api yuminstall salt-api –yservice salt-api startchkconfig salt-api on2、安装halite及其依赖文件 yuminstall python-pip –ypipinstall --upgrade pippipinstall -U halitepipinstall cherrypypi…

什么是 NIO? NIO 和 BIO、AIO 之间的区别是什么?NIO主要用来解决什么问题?

1 BIO&#xff0c;NIO&#xff0c;AIO都有什么区别&#xff0c;NIO的原理是什么&#xff1f; BIO BIO&#xff1a;传统的网络通讯模型&#xff0c;就是BIO&#xff0c;同步阻塞IO&#xff0c; 其实就是服务端创建一个ServerSocket&#xff0c; 然后就是客户端用一个Socket去连…

关于页面配色

一、互补色 当两个颜色恰好在色环的两端时&#xff0c;这两个颜色叫做补色。补色搭配能形成强列的对比效果 在线配色工具地址 文字背景色和文字颜色互为补色&#xff0c;文字会很难看清&#xff0c;那么就只使用一种颜色作为主要颜色&#xff0c;其补色用来装点页面 比如&…

axure命令行_Axure变量详解

以前使用Axure只是停留在元件的布局和简单交互事件的设置&#xff0c;使用得非常肤浅&#xff0c;直到现在有时间静下心来重学Axure&#xff0c;才发现函数和变量的牛逼之处。以前在做较复杂交互时&#xff0c;为了实现一个效果吭哧吭哧写了一串命令&#xff0c;而往往函数和变…

一次性说清楚秒验(本机号码一键登录)基本原理、优势、场景、交互过程和常见的问题

一、 关于秒验&#xff08;一键登录&#xff09;基本原理 秒验&#xff08;一键登录&#xff09;产品整合了三大运营商特有的数据网关认证能力&#xff0c;升级短信验证码体验&#xff0c;应用于用户注册、登陆、支付、安全校验等场景&#xff0c;可实现用户无感知校验&#x…

php 基本语法

一、php 基本语法 <?php // echo | print 两种输出语句 echo 任何位置; print 任何位置; ?>二、注释 <?php // echo 任何位置; // 单行注释 /*多行注释*/ ?>三、变量声明 变量名以 $ 开始&#xff0c;后面跟变量的名字&#xff0c;区分大小写 <?php $x …

爬虫python能做游戏吗_一入爬虫深似海,从此游戏是路人!总结我的python爬虫学习笔记!...

1、基本抓取网页get方法post方法2、使用代理IP在开发爬虫过程中经常会遇到IP被封掉的情况&#xff0c;这时就需要用到代理IP&#xff1b;在urllib2包中有ProxyHandler类&#xff0c;通过此类可以设置代理访问网页&#xff0c;如下代码片段&#xff1a;3、Cookies处理cookies是某…

三大运营商实现本机号码一键登录原理与应用

很多APP的目前都支持“本机号码一键登录”功能。本机号码一键登录是基于运营商独有网关认证能力推出的账号认证产品。用户只需一键授权&#xff0c;即可实现以本机号码注册/登录&#xff0c;相比先前的短信验证码流程体验更优。 目前市面上有很多厂商提供三网验证的服务&#…

php 数据类型

七种数据类型&#xff1a; String / Integer / Float / Boolean / Array / Object / null 检测变量的数据类型和值 var_dump() 一、字符串 $x abc; var_dump($x); echo $x; // string abc二、整形 $x 1234; var_dump($x); echo $x; // int 1234三、浮点型 $x 1.1; var_d…

部署到gcp_剖析大数据公司为什么选择 GCP?

文章来源&#xff1a;加米谷大数据假如L 是一家大数据公司。下面我们的文章将围绕L展开分析。很多公司拥有大数据。每天早餐之前&#xff0c;健壮的日志框架就已经生成了 PB 级别的日志&#xff0c;并以防万一将这些数据长期保存在了亚马逊的 S3 上。还有一些公司会使用他们自己…

Redis缓存那点破事 , 绝杀面试官 25 问

转载&#xff1a;https://blog.csdn.net/itomge/article/details/122118060 精彩文章汇总 GitHub https://github.com/aalansehaiyang/technology-talk &#xff0c;Star 12K &#xff0c;汇总java生态圈常用技术框架、开源中间件&#xff0c;系统架构、数据库、大公司架构案例…

css 动画 - 这次不会忘记了

css 动画基本用法 div {animation-name: rainbow; /*动画名称*/animation-duration: 1s; /*这段动画开始到结束总共需要花费多长时间*/animation-fill-mode: forwards; /*动画在结束时元素的样式*/animation-iteration-count: infinite; /*动画运行几次&#xff1f;*/animatio…

Mysql的select in会自动过滤重复的数据

Mysql的select in会自动过滤重复的数据 默认使用 SELECT 语句&#xff1b; 当加上in范围后&#xff0c;结果如下图&#xff1a; in范围内的数据&#xff0c;如果有重复的&#xff0c;只会选择第一个数据。 所以如果不是直接使用SQL语句来查询&#xff0c;而是在代码中来查询…

vue初始

一、引入 Vue 文件 <script src"https://cdn.jsdelivr.net/npm/vue2.6.14/dist/vue.js"></script>二、定义一个容器 <!--root 容器里的代码称为 Vue模板;VueProject 实例和容器是一一对应的&#xff1b;真实开发中只有一个 Vue 实例&#xff0c;并且…

小眼睛适合大框还是小框眼镜_【图】小眼睛适合什么眼镜框 这个禁忌千万不要犯_小眼睛_伊秀服饰网|yxlady.com...

很多天生眼睛偏小的人&#xff0c;都会想尽办法来让自己的眼睛看起来更大&#xff0c;而佩戴眼镜就是其中比较常见的方式。但佩戴眼镜也是需要讲究诀窍的&#xff0c;那么&#xff0c;小眼睛的人应该如何挑选眼镜呢&#xff1f;对于现代的年轻男女来说&#xff0c;很多时候佩戴…

java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key c

错误原图&#xff1a; 错误分析&#xff1a;外键约束失败导致插入数据有误 解决问题&#xff1a;检查被关联的外键字段值&#xff0c;在原表中是否有对应的值&#xff0c;添加时外键的值在原表&#xff08;外键关联的表&#xff09;中一定要有该值&#xff0c;没有的值添加报错…

android 开源 高斯模糊_Android图像处理 - 高斯模糊的原理及实现

欢迎大家前往由前言高斯模糊是图像处理中几乎每个程序员都或多或少听过的名词&#xff0c;但是对其原理大家可能并不了解&#xff0c;只知道通过高斯模糊能实现图像毛玻璃效果。本文首先介绍图像处理中最基本的概念&#xff1a;卷积&#xff1b;随后介绍高斯模糊的核心内容&…

Vue数据绑定v-bind

一、单向数据绑定 <div id"root"><!-- 仅仅只是绑定一个属性在标签上 只有 data 变化&#xff0c;输入框才会变化 -->数据单向绑定&#xff1a;<input type"text" name"" id"" :value"name"> </div&g…

MySql 清空、删除、截断表时1701错误

项目已经进行一段时间&#xff0c;整体的开发工作已经完成。接下来要进入综合测试阶段&#xff0c;所以想要将数据清理一下&#xff0c;然后报了1701错误&#xff0c;由错误提示得知是外键约束的问题 解决办法&#xff1a;关闭外键约束->清空表、截断表->启动外键约束。…