• git formatpatch/diff


    Git 提供了两种补丁方案:
    一是用git diff生成的UNIX标准补丁.diff文件,二是git format-patch生成的Git专用.patch 文件。

    • .diff文件: 只记录文件更改的内容,不带有commit记录信息,多个commit可以合并成一个diff文件。
    • .patch文件: 带有记录文件更改的内容,也带有commit记录信息,每个commit对应一个patch文件。
    1. 创建 .patch / .diff 文件

      • git format-patch -1 在当前项目文件夹下,创建最新一次提交的 .patch 文件

      • git format-patch <commitHash> -n 在当前项目文件夹下,创建某次提交(含)之前的 n 次提交的 .patch 文件

      • git format-patch <commitHash> -1 在当前项目文件夹下,创建某次提交的 .patch 文件

      • git format-patch <commitHashA>..<commitHashB> 在当前项目文件夹下,创建某两次提交间的所有 .patch 文件(假设提交顺序为a,b,c,d,如果填a..d,则为b,c,d不包括a)

      • git format-patch <commitHash> -n -o C:/Users/Administrator/Desktop 在桌面,创建某次提交(含)之前的 n 次提交的 .patch 文件

      • git diff <commitHashA> <commitHashB> > <xx.diff> 在当前项目文件夹下,创建某两次提交间的 .diff 文件(假设提交顺序为a,b,c,d,如果填a d,则为b,c,d不包括a)
        如:git format-patch d75b13a 666f706 > abc.diff

    2. 应用 .patch / .diff 文件

      • git apply --stat <xx/xx/xx.patch> 这个命令用于检查补丁文件,确保文件没有问题

      • git apply --check <xx/xx/xx.patch> 这个命令用于检查如果应用到本代码树是否会有问题,相当于一个演练。这样可以避免合并的时候才出现问题

      • git apply <xx/xx/xx.patch> 应用 .patch 文件,不包括提交信息

      • git apply <xx/xx/xx.diff> 应用 .diff文件,不包括提交信息

      • git am <xx/xx/xx.patch> 应用修改,包括提交信息

      • git am -s <xx/xx/xx.patch> 应用修改,包括提交信息,并在提交信息增加提交者的签名信息

    冲突解决
    在应用补丁时,可能会出现冲突的情况,会应用失败,如:

    Administrator@kingBook MINGW64 ~/Desktop/testGitB (master)
    $ git am -s 0002-cc.patch
    error: patch failed: new text.txt:1
    error: new text.txt: patch does not apply
    hint: Use 'git am --show-current-patch=diff' to see the failed patch
    Applying: cc
    Patch failed at 0001 cc
    When you have resolved this problem, run "git am --continue".
    If you prefer to skip this patch, run "git am --skip" instead.
    To restore the original branch and stop patching, run "git am --abort".
    
    Administrator@kingBook MINGW64 ~/Desktop/testGitB (master|AM 1/1)
    $ 
    
    // 提示:
    // 解决此问题后,运行 "git am --continue".
    // 如果你想跳过这个补丁,可以运行 "git am --skip".
    // 要恢复原始分支并停止修补,请运行 "git am --abort".
    

    此时需要解决冲突:

    1. 首先执行 `git apply --reject xxxx.patch`,应用 .patch 文件中不冲突的部分,并将冲突的部分生成对应的 .rej 文件记录下来。
    2. 依据生成的.rej文件内容逐个手动解决冲突,然后删除这些 *.rej 文件
    3. 执行命令 `git status` 查看当前改动过的以及新增的文件,确保没有多添加或少添加文件
    4. 执行命令 `git add -A` 将所有改动都添加到暂存区
    5. 执行命令 `git am --resolved` 继续被中断的 patch 合入操作。合入完成后,会有提示信息输出。
    6. 执行命令 `git log` 确认合入状态,完成冲突解决。
    
  • 相关阅读:
    spoj 7001 Visible Lattice Points莫比乌斯反演
    codeforces 446C DZY Loves Fibonacci Numbers 数论+线段树成段更新
    fzu 1753 质因数的应用
    hud 4746 莫比乌斯反演
    hdu 1695 容斥原理或莫比乌斯反演
    hdu 4741 Save Labman No.004异面直线间的距离既构成最小距离的两个端点
    codeforces练习
    年底Android面试整理(附答案)
    最近Android真的凉凉了?
    Android 应用防止被二次打包指南
  • 原文地址:https://www.cnblogs.com/kingBook/p/16266068.html
Copyright © 2020-2023  润新知