git diff 生成patch合入代码

简介: git diff 生成patch合入代码

前言


我们合并别人的代码时候有些都在服务器可以使用cherry-pick 、merge、rebase等,但有时候有些修改是本地的,有些做了单独commit,可以使用git format需要做一个patch文件,但是有些时候有些修改是临时的,没有提交,这个时候我们也可以用git diff命令进行生成patch文件,然后使用patch命令合入,下面就给大家做一个分享。

作者:良知犹存

转载授权以及围观:欢迎关注微信公众号:羽林君

或者添加作者个人微信:become_me


diff 和 patch

我们经常会使用diff和patch两个组合命令生成patch文件,然后进行合入。一般使用如下:生成patch文件,patch打入

 diff -Nur src src_new >src.patch 
 patch -p[n] < src.patch

这个比较多使用,文章也比较多,这里不多赘述。


git diff

今天描述的是git diff配合patch,下面是git diff的详细介绍:

参数 描述
git diff 查看尚未暂存的文件更新了哪些部分,此命令比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异。也就是修改之后还没有暂存起来的变化内容。
git diff --cached 查看已经暂存起来的文件(staged)和上次提交时的快照之间(HEAD)的差异。显示的是下一次 commit 时会提交到 HEAD 的内容(不带 -a 情况下)
git diff HEAD 显示工作版本(Working tree)和 HEAD 的差别
git diff filename 查看尚未暂存的某个文件的更新
git diff –cached filename 查看已经暂存起来的某个文件和上次提交的版本之间的差异
git diff topic master 直接将两个分支上最新的提交做比较
git diff topic…master 输出自 topic 和 master 分别开发以来,master 分支上的 changed
git diff --stat 查看简单的 diff 结果,可以加上 --stat 参数
git diff test 显示当前目录和另一个叫 test 分支的差别
git diff HEAD – ./lib 显示当前目录下的 lib 目录和上次提交之间的差别
git diff HEAD^ HEAD 比较上次提交 commit 和上上次提交
git diff SHA1 SHA2 比较两个历史版本之间的差异


git diff 与 patch 使用实例

以下是一个暂未提交的修改,通过 git status可以查看

839886cd3c004deb9abdba851aa48a4c.png

我们可以通过 这个git diff,先查看对比信息839886cd3c004deb9abdba851aa48a4c.png

之后使用基本命令生成patch git diff > test.patch839886cd3c004deb9abdba851aa48a4c.png


patch命令 打补丁

直接打补丁 patch -p1 < test.patch839886cd3c004deb9abdba851aa48a4c.png

也可以到下层目录,使用p2进行打补丁 patch -p2 < test.patch839886cd3c004deb9abdba851aa48a4c.png

patch -p[n] < test.patch 其中n为层级,层级的详细解释:

假如补丁头是

> --- src/a/b/c/d/file     
> +++ src_new/a/b/c/d/file

使用p0 表示在当前目录下查找src/a/b/c/d/file

使用p1 表示在当前目录下查找a/b/c/d/file

使用p2 表示在当前目录下查找b/c/d/file

使用p3 表示在当前目录下查找c/d/file

使用p4 表示在当前目录下查找d/file

使用p5 表示在当前目录下查找file

不使用pn表示忽略所有斜杠,在当前目录下查找file


git apply 打补丁

除了patch命令,我们也可以使用git apply,这里因为没有commit信息所以不能用 git am,使用应用补丁之前我们可以先检验一下补丁能否应用,git apply --check patch 如果没有任何输出,那么表示可以顺利接受这个补丁

git apply --stat test.patch
git apply --check test.patch

839886cd3c004deb9abdba851aa48a4c.png

it apply --check 没有提示信息,表示正常,直接进行打入补丁 git apply test.patchimage.png

因为没有提交信息 所以git am无法使用839886cd3c004deb9abdba851aa48a4c.png


结语

这就是我自己的一些git diff打patch使用分享。如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。

目录
相关文章
|
26天前
|
开发工具 git
使用Git根据日期进行代码版本切换的方法
通过以上步骤,可以有效地根据日期进行Git代码版本的切换。这种方法在需要回溯历史版本进行bug修复或功能复查时特别有用。Git的灵活性和强大功能使其成为现代软件开发不可或缺的工具之一。
242 103
|
4月前
|
数据可视化 Java 测试技术
Git Flow 现代实操指南含从代码提交到 CI/CD 全流程的实用技巧与长尾关键词解析 Git Flow
本指南结合现代技术趋势,详解Git Flow工作流,涵盖GitHub Actions自动化、Conventional Commits规范、Gitmoji可视化等内容,助你实现代码到CI/CD的全流程管理,提升团队开发效率与代码质量。
283 2
|
6月前
|
JavaScript 前端开发 持续交付
实际工作中 Git Commit 代码提交规范是什么样的?
实际工作中 Git Commit 代码提交规范是什么样的?
381 7
|
6月前
|
网络安全 开发工具 git
Git仓库创建与代码上传指南
本教程介绍了将本地项目推送到远程Git仓库的完整流程,包括初始化本地仓库、添加和提交文件、创建远程仓库、关联远程地址及推送代码。同时,还提供了`.gitignore`配置、分支管理等可选步骤,并针对常见问题(如认证失败、分支不匹配、大文件处理及推送冲突)给出了解决方案。适合初学者快速上手Git版本控制。
|
5月前
|
开发工具 git 索引
如何使用Git的暂存区来管理代码更改?
如何使用Git的暂存区来管理代码更改?
908 0
|
IDE 网络安全 开发工具
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
163 1
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
|
开发工具 数据安全/隐私保护 git
记录一次使用git工具拉取coding上代码密码账号错误的经历
这篇文章记录了作者在使用Git工具从Coding平台克隆项目时遇到的账号密码错误问题,并分享了通过清除电脑凭证中错误记录的账号密码来解决这个问题的方法。
记录一次使用git工具拉取coding上代码密码账号错误的经历
|
开发工具 git Python
通过Python脚本git pull 自动重试拉取代码
通过Python脚本git pull 自动重试拉取代码
379 5
|
10月前
|
Devops Shell 网络安全
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
445 16
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
|
开发工具 git
git如何修改提交代码时的名字和邮箱?
git如何修改提交代码时的名字和邮箱?
3720 4