ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

git patch 功能

2019-05-29 21:00:45  阅读:242  来源: 互联网

标签:功能 git Fix patch master branch 分支


概括

  git 有两种生成 patch 的方式,以下分别举实例说明用法。

  • 以下两个实例都需要首先创建一个 master 分支
    $ touch a
    $ echo "This is a file" > a
    $ git init
    $ git add a
    $ git commit -m "init"
    $ git branch
    * master

git diff生成的标准patch

  • 生成标准patch
    $ git branch Fix             #建立一个分支
    $ git checkout Fix           #切换到Fix分支中
    Switched to branch 'Fix'       
    $ git branch
    * Fix
      master $ echo "This is a Fix" >> a  #修改分支内容 $ git diff diff --git a/a b/a index 0637880..ea52879 100644 --- a/a +++ b/a @@ -1 +1,2 @@ This is a file +This is a Fix $ git commit -a -m "Fix" [Fix d6e40c5] Fix 1 file changed, 1 insertion(+) $ git diff master > patch #生成patch
  • 给master打patch
    $ git checkout master        #切换到master分支
    Switched to branch 'master'
    $ git apply patch              #打patch
    $ cat a                        #查看文件 a 内容发现改变了
    This is a file
    This is a Fix
    $ git commit -a -m "apply Fix patch"    #提交

git format-patch生成的git专用补丁

  •  生成git专用patch
    $ git branch Fix             #建立一个分支
    $ git checkout Fix           #切换到Fix分支中
    Switched to branch 'Fix'       
    $ git branch
    * Fix
      master
    $ echo "This is a Fix" >> a  #修改分支内容
    $ git commit -a -m "Fix"
    [Fix 00fca27] Fix
     1 file changed, 1 insertion(+)
    $ git format-patch -M master #生成patch
    0001-Fix.patch

    $ cat 0001-Fix.patch
    From 00fca2756999112ebfbd357bfa114ea07bae2de6 Mon Sep 17 00:00:00 2001
    From: rivsidn <rivsidn@163.com>
    Date: Wed, 29 May 2019 20:43:17 +0800
    Subject: [PATCH] Fix

    ---
     a | 1 +
     1 file changed, 1 insertion(+)

    diff --git a/a b/a
    index 0637880..86e7879 100644
    --- a/a
    +++ b/a
    @@ -1 +1,2 @@
     This is a file
    +This is a Fix  
    --
    2.7.4

  • 打patch
    $ git checkout master              #切换到master分支
    Switched to branch 'master'
    $ git am 0001-Fix.patch           #打patch
    Applying: Fix
    rivsidn@rivsidn:~/test$ cat a
    This is a file
    This is a Fix

总结

  • 兼容性:很明显,git diff生成的Patch兼容性强。如果你在修改的代码的官方版本库不是Git管理的版本库,那么你必须使用git diff生成的patch才能让你的代码被项目的维护人接受。
  • 除错功能:对于git diff生成的patch,你可以用git apply --check 查看补丁是否能够干净顺利地应用到当前分支中;如果git format-patch 生成的补丁不能打到当前分支,git am会给出提示,并协助你完成打补丁工作,你也可以使用git am -3进行三方合并,详细的做法可以参考git手册或者《Progit》。从这一点上看,两者除错功能都很强。
  • 版本库信息:由于git format-patch生成的补丁中含有这个补丁开发者的名字,因此在应用补丁时,这个名字会被记录进版本库,显然,这样做是恰当的。因此,目前使用Git的开源社区往往建议大家使用format-patch生成补丁。

注意事项

  • 一般情况下,为了保护master,我们会建立一个专门处理新交来的patch的分支
  • 实际应用中,我们不会在一个分支建patch,到另一个分支去应用,因为只有merge一下就好了,此处仅仅是做演示用。

参考资料

  • https://www.cnblogs.com/y041039/articles/2411600.html

标签:功能,git,Fix,patch,master,branch,分支
来源: https://www.cnblogs.com/rivsidn/p/10945348.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有