• 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
    
    • 1
    • 2
    • 3

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

    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 sha1:filename sha2:filename查看版本 sha1 的文件 filename 和版本 sha2 的文件 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可以查看

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

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

    patch命令 打补丁

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

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

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

    假如补丁头是

    > --- src/a/b/c/d/file     
    > +++ src_new/a/b/c/d/file
    
    • 1
    • 2
    • 使用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
    
    • 1
    • 2
    • 3

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

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

    结语

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


    作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注我,与我一起同行。

                                  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
    
    • 1

    推荐阅读

    【1】jetson nano开发使用的基础详细分享

    【2】Linux开发coredump文件分析实战分享

    【3】CPU中的程序是怎么运行起来的 必读

    【4】cartographer环境建立以及建图测试

    【5】设计模式之简单工厂模式、工厂模式、抽象工厂模式的对比

    本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。

  • 相关阅读:
    NBA球员数据爬虫练习
    Hippy - 值得关注的免费开源跨端开发框架,由腾讯出品,支持将 JS 代码发布到安卓 / iOS / web
    Golang入门笔记(15)—— 数组
    最全phpmyadmin漏洞汇总
    Maven除了管理包还能干嘛?
    TYPE-C接口桌面显示器:视频与充电的双重革新
    java虚拟机详解篇五(类的加载器)
    Github 最受欢迎的 35 个项目一览
    知识蒸馏方法汇总
    Verilog零基础入门(边看边练与测试仿真)-状态机-笔记(7-10讲)
  • 原文地址:https://blog.csdn.net/lyn631579741/article/details/127779346