Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Git 补丁 patch 使用方法

Git 补丁 patch 使用方法

作者头像
为为为什么
发布于 2022-11-23 12:33:52
发布于 2022-11-23 12:33:52
5.3K0
举报
文章被收录于专栏:又见苍岚又见苍岚

Git 的 patch 功能支持开发者通过文件与别人分享自己的改动,本文记录 patch 使用方法。

简介

在同一个 git 管理仓库下,当然直接使用 git 的常用命令可以很好地和其他开发者共享工作,当开发者不处在同一个版本管理平台下,或仅作临时修改时,则可以通过 patch 打补丁的方式共享代码改动

  • Git 提供了两种补丁方案,一种是通过 git diff 生成的 .diff 文件,第二种是通过 git format-patch 生成的 .patch 文件。
  • 通过 git diff 生成的文件不含有 commit 信息,可以指定文件生成 diff,也可以指定单个 commit, 多个 commit 生成 。
  • 通过 git format-patch 生成的 .patch 文件 含有 commit 信息。一个 commit 对应一个 patch 文件。

生成 patch

git diff
  • 指定文件生成 patch 文件
  • patch 补丁即为根据 git diff 生成的文本内容文件,最简单的生成方法为 git diff > test.patch

比如我们修改了 A.java、B.java 文件,我们只想将 A.java 文件的修改打成 patch,那么我们可以使用以下的命令: 1git diff A.java > test.patch

想把所有的修改文件打成 patch,即 A.java、B.java 文件,只需要使用下面的命令: 1git diff > test.patch

  • 指定 commit id 生成 patch

使用命令行 1git diff [commit sha1 id] > [diff文件名]

git format-patch

当前分支所有超前 master 的提交:

1

git format-patch -M master

某次提交以后的所有 patch:

1

git format-patch [commit id]

[commit id] 指的是 commit 名,可以通过 git log 查看。

从根到指定提交的所有 patch:

1

git format-patch --root 4e16

某两次提交之间的所有 patch:

1

git format-patch [commit sha1 id].. [commit sha1 id]

1git format-patch 365a..4e16 365a4e16 分别对应两次提交的名称

  • 某次提交(含)之前的几次提交:

1

git format-patch –n [commit id]

1git format-patch –n 07fe –npatch 数,07fe 对应提交的名称

  • 单次提交即为:

1git format-patch -1 [commit id]

  • git format-patch 生成的补丁文件默认从1开始顺序编号,并使用对应提交信息中的第一行作为文件名。
  • 如果使用了--numbered-files 选项,则文件名只有编号,不包含提交信息;
  • 如果指定了–stdout 选项,可指定输出位置,如当所有 patch 输出到一个文件;可指定 -o 指定 patch 的存放目录。

应用 patch

git apply
  • 应用 git apply 命令应用 patch 的原理是将 patch 中的改动添加到工作区,应用后会相当于对文件做出修改而不惊动 git
  • git apply 用于 diffformat-patch 输出的 patch
使用步骤

将生成的 patch 文件放在生成时候相同的位置

先检查patch文件格式:

1

git apply --stat xxx.patch

测试patch是否能应用到当前分支

1

git apply --check xxx.patch

应用此 patch 打补丁

1

git apply xxx.patch

这种方式传递的修改将会丢失提交信息和作者信息,但可以兼容非 git 管理的代码。除此之外,git 还提供另一个命令更便于 git 库之间的 patch 传递。

过程中如果有冲突则会停止应用,报错:

1

patch does not apply

解决冲突

出现冲突的时候,这个时候需要我们手动解决冲突。

首先,执行以下命令,自动合入 patch 中不冲突的代码,同时保留冲突的部分

1

git apply --reject xxxx.patch

同时会生成后缀为 .rej 的文件,保存没有合并进去的部分的内容,可以参考这个进行冲突解决。

git am

format-patch 生成的 patch 保存了更多提交信息。因此除了 git apply 之外,还可以用更智能的 git am 命令使用此 patch,会在修改文件的同时将 commit 信息也一起应用到 git 中。

git am 可以复现修改,保留作者信息,保留 commit 信息,但 commit ID 无法保留

git am 命令会在应用patch 失败时给出详细的错误信息,并允许手动解决冲突,是官方较为推荐的补丁应用方式。

在使用 git am 之前, 需要先 git am --abort 一次,以放弃掉以前的 am 信息。

不然可能会遇到这样的错误。

1

.git/rebase-apply still exists but mbox given.

git am 可以一次合并一个文件,或者一个目录下所有的 patch

1

git am *.patch

再次声明,am 复现的 commitID 会和之前不同,因此建议在有仓库管理的情况下用 git pull

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年11月8日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
git format用法学习
git format-patch -1 <commit-id> -o <保存路径> 是一个用于生成单个提交的补丁文件的 Git 命令。下面是对该命令及其参数的解释:
天天Lotay
2024/01/20
4840
如何使用git 生成patch 和打入patch
平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用git 生成patch 给到我们,那我们就需要把客户给到patch 打入到我们的project ,基于这样一个场景,我把git 如何生成patch 和如何打入patch 做总结
从大数据到人工智能
2022/09/16
5.9K0
如何使用git 生成patch 和打入patch
Git 教程 -- 基于自己学习记录
由于学校布置了一项熟悉 git 和 svn 操作的实验,所以自己重新温习了下 git,记录过程在这。
希希里之海
2019/04/17
7250
Git 教程 -- 基于自己学习记录
5.3 分布式 Git - 维护项目
除了如何有效地参与一个项目的贡献之外,你可能也需要了解如何维护项目。 这包含接受并应用别人使用format-patch 生成并通过电子邮件发送过来的补丁,或对项目添加的远程版本库分支中的更改进行整合。 但无论是管理版本库,还是帮忙验证、审核收到的补丁,都需要同其他贡献者约定某种长期可持续的工作方式。
shaonbean
2019/05/26
6430
5.3 分布式 Git - 维护项目
git 使用的一些小技巧
cherry-pick 多个commit查找丢失的commitgit status 中文乱码git format-patch删除taggitignore 修改不起作用windows下创建.gitignore:今日一番
efonfighting
2019/11/24
1.2K0
Git 使用记录 - 基础
命令行直接输入git提示应用没有安装的情况下 安装git,[图形化 gitk, 差异比较工具 meld]
orientlu
2018/09/13
1.1K0
Git 使用记录 - 基础
测试开发必会12个Git高级命令
分支合并会被记录为一次合并提交,这种做法是很有意义的。比如说,可以通过这种方式来标识一个新特性被合并到了发布分支中。不过,当多个团队成员工作在一个项目中并使用常规的git pull来同步分支时,提交时间线就会被不必要的合并提交所污染。更好的做法则是使用git rebase将一个feature分支变基到master分支:
测试小兵
2019/11/20
9230
版本控制工具Git详解
这是一个学Git无法绕开的话题,也是面试的常见题,我猜很多人的回答都是百度上直接背的,有了解过SVN底层的实现原理吗?
Java架构师必看
2021/05/14
1K0
版本控制工具Git详解
Git 命令归纳总结
有两个命令使用得最多了,从第一次调用 Git到每天的日常微调及参考,这个两个命令就是: config和 help 命令
shaonbean
2019/05/26
9070
5.2 分布式 Git - 向一个项目贡献
描述如何向一个项目贡献的主要困难在于完成贡献有很多不同的方式。 因为 Git 非常灵活,人们可以通过不同的方式来一起工作,所以描述应该如何贡献并不是非常准确 - 每一个项目都有一点儿不同。 影响因素包括活跃贡献者的数量、选择的工作流程、提交权限与可能包含的外部贡献方法。
shaonbean
2019/05/26
6260
5.2 分布式 Git - 向一个项目贡献
git commit 删除中间提交的错误commit id
经常会遇到提交多个commit ,最后发现版本有问题,需要删除中间的一个commit, git 中并没有提供现成的命令,需要多个命令组合完成该功能.
程序手艺人
2019/02/21
2.8K0
git使用步骤_小猪酸奶的使用步骤
接触Git也些年头了,对于Git的使用也算是略有心得,想着 出于自己日后回顾,也便于他人查阅学习的目的,遂有此文, 相信看完此文你的Git使用会更进一步,谢谢~
全栈程序员站长
2022/11/08
1.1K0
git使用步骤_小猪酸奶的使用步骤
Git实战
学习Git有一段时间了,一路上也一直在写有关于Git方面的文章,但总觉得不是我想要的,就是感觉有点肉肉的,不够直接,不够马上出效果,所以才有了这篇文章,当然这文章可能会不断更新和修正,希望读者可以作为一个工具文章使用,我也会努力将其优化的更加的符合工作场景
迹_Jason
2019/05/28
9450
6. Git 补充内容
显式引用和隐式引用用来指代每一次提交。尽管有时两种引用都不方便,但是幸运的是, Git 提供了许多不同的机制来为提交命名,这些机制有各自的优势,需要根据上下文来选择。
acc8226
2022/05/17
9210
8.1 自定义 Git - 配置 Git
到目前为止,我们已经阐述了 Git 基本的运作机制和使用方式,介绍了许多 Git 提供的工具来帮助你简单且有效地使用它。 在本章,我们将演示如何借助 Git 的一些重要的配置方法和钩子机制,来满足自定义的需求。 通过这些工具,它会和你、你的公司或你的团队配合得天衣无缝。
shaonbean
2019/05/26
1K0
git diff 转
      git diff HEAD [<path>...]  如果HEAD指向的是master分支,那么HEAD还可以换成master
双面人
2019/05/21
4820
Git 中文参考(四)
稍微冗长一点,并在名字后显示远程网址。注意:必须放在remote和subcommand之间。
ApacheCN_飞龙
2024/06/26
5300
Git 的一些事
假设远程分支上有2个提交,然后基于远程develop,再创建一个分支feature。
腾讯工蜂
2018/11/20
11.6K0
Git 中文参考(六)
每次提交时,将每个提交的补丁准备在一个文件中,格式化为类似于 UNIX 邮箱格式。此命令的输出便于电子邮件提交或与 git am 一起使用。
ApacheCN_飞龙
2024/06/26
6750
Git工作中的使用
git是一个命令行工具,当前的最新版本是Git-1.9.5-preview20141217.exe。安装过程很简单,一路默认next既可。
matt
2022/10/25
3780
Git工作中的使用
相关推荐
git format用法学习
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档