如何用git-am来合并git format patch m-patch生成patch git回退

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
奔向未来, 汗水铸辉煌, 放眼世界, 挥笔写江山
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(3171)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'取消补丁和使用 git 制作补丁',
blogAbstract:'如果应用了某一个补丁之后想恢复原来的文件,那么使用参数 -R,例如:1. 首先打了一个补丁& &$ patch -p1 & my.patch2 然后想恢复原来的文件,那么& &$ patch -R -p1 & my.patch如果要为多个文件制作补丁,那么可以使用 git 来快速生成,因为 git 是一个局部目录的库,所以不会有多余开销。1.创建 git& &$ cd src& &$ git init2.添加需要制作补丁的文件,或者全部添加& &$ git add *&& 或者&',
blogTag:'patch,git,unpatch',
blogUrl:'blog/static/0',
isPublished:1,
istop:false,
modifyTime:7,
publishTime:3,
permalink:'blog/static/0',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'奔向未来, 汗水铸辉煌, 放眼世界, 挥笔写江山',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}8260人阅读
git 详解(34)
常用的 git 命令(14)
[junwei@junwei-fc12 git_test_range]$ git format-patch HEAD^ &==最近的1次commit的patch
[junwei@junwei-fc12 git_test_range]$ git format-patch HEAD^^ &==最近的2次commit的patch
[junwei@junwei-fc12 git_test_range]$ git format-patch HEAD^^^ &==最近的3次commit的patch
[junwei@junwei-fc12 git_test_range]$ git format-patch HEAD^^^^ &==最近的4次commit的patch
[junwei@junwei-fc12 git_test_range]$ git format-patch commit号 &== 最近的 所有commit的patch
1. 两个commit间的修改(包含两个commit)
git format-patch &r1&..&r2&
2. 单个commit
git format-patch -1 &r1&
3. 从某commit以来的修改(不包含该commit)
git format-patch &r1&
这篇文章主要介绍一下git-am 和 format-patch 的使用。 因为在git使用当中,会有很多时候别人(供应商或者其他的开发人员)发过来一系列的patch,这些patch通常的是类似这样的名字:
0001--JFFS2-community-fix-with-not-use-OOB.patch
0002--Community-patch-for-Fix-mount-error-in.patch
0003--partial-low-interrupt-latency-mode-for-ARM113.patch
0004--for-the-global-I-cache-invalidation-ARM11.patch
0005--1-arm-Add-more-cache-memory-types-macr.patch
0006--2-Port-imx-3.3.0-release-to-2.6.28.patch
0007--3-Add-MX25-support.patch
0008--Move-asm-arch-headers-to-linux-inc-dir.patch
0009--1-regulator-allow-search-by-regulator.patch
里面包含了提交的日志,作者,日期等信息。你想做的是把这些patch引入到你的代码库中,最好是也可以把日志也引入进来, 方便以后维护用。传统的打patch方式是
patch -p1 & 0001--JFFS2-community-fix-with-not-use-OOB.patch
这样来打patch,但是这样会把这些有用的信息丢失。由于这些patch显然是用git format-patch来生成的,所以用git的工具应该就可以很好的做好。git-am 就是作这件事情。
在使用git-am之前, 你要首先git am –abort 一次,来放弃掉以前的am信息,这样才可以进行一次全新的am。
不然会遇到这样的错误。
&&&&&&&&&&&&&&& .git/rebase-apply still exists but mbox given.
git-am 可以一次合并一个文件,或者一个目录下所有的patch,或者你的邮箱目录下的patch.
下面举两个例子:
cd small-src
git-am ~/patch/0001-trival-patch.patch
如果成功patch上去, 你就可以去喝杯茶了。如果失败了, git 会提示错误, 比如:
error: patch failed: android/mediascanner.cpp:452 error: android/mediascanner.cpp: patch does not apply
这样你就需要先看看patch, 然后改改错误的这个文件,让这个patch能够patch上去。
cd opencore
git am ~/patch-set/*.patch
(这里git就会按照文件名的顺序一次am这些patch)如果一切顺利, 你所有的patch都OK了, 你又Lucky了。不过不顺利的时候十有八九,如果git am中间遇到了patch,am就会停到打这个patch的地方, 告诉你是哪个patch打不上去。
比如我现在有一个文件file,有两个patch.
file 的内容是
两个patch分别是:
0001-add-line.patch:
From 8869ccbced494eafa5a54f2a261df0f Mon Sep
Date: Thu, 22 Apr :34 +0800
Subject: [PATCH 1/2] add line --- file | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/file b/file
index 067780e..685f0fa 100644
--- a/file
+++ b/file
@@ -3,3 +3,5 @@ file:
some text more text + +add line -- 1.6.3.3
0002-change-line.patch:
From f756e1b3a87c216b7e0afea9d15badd Mon Sep 17 00:00:00 2001
Date: Thu, 22 Apr :19 +0800
Subject: [PATCH 2/2] change line --- file | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/file b/file
index 685f0fa..7af
--- a/file
file: -some text
+Change line text
-- 1.6.3.3
git am *.patch
来merge这些patch, 报错, Patch failed at 0001 add line这样我们看0001这个patch,原来patch需要的是some text, 而file里面是the text, 所以我们用编辑器把这行改成some text,
git apply 0001-add-line.patch
git add file
git am --resolved
在解决完冲突以后, 比如用git add来让git知道你已经解决完冲突了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2912757次
积分:23428
积分:23428
排名:第242名
原创:371篇
转载:109篇
评论:309条
(10)(1)(1)(2)(6)(1)(2)(1)(1)(3)(1)(1)(3)(5)(4)(4)(5)(1)(4)(10)(5)(3)(8)(2)(2)(6)(4)(9)(5)(5)(16)(6)(20)(24)(18)(6)(8)(5)(1)(15)(4)(19)(35)(35)(21)(18)(21)(7)(2)(21)(31)(38)3971人阅读
这篇文章主要介绍一下git-am 和 format-patch 的使用。 因为在git使用当中,
会有很多时候别人(供应商或者其他的开发人员)发过来一系列的patch,这些patch通常的是类似这样的名字:
0001--JFFS2-community-fix-with-not-use-OOB.patch
0002--Community-patch-for-Fix-mount-error-in.patch
0003--partial-low-interrupt-latency-mode-for-ARM113.patch
0004--for-the-global-I-cache-invalidation-ARM11.patch
0005--1-arm-Add-more-cache-memory-types-macr.patch
0006--2-Port-imx-3.3.0-release-to-2.6.28.patch
0007--3-Add-MX25-support.patch
0008--Move-asm-arch-headers-to-linux-inc-dir.patch
0009--1-regulator-allow-search-by-regulator.patch
里面包含了提交的日志,作者,日期等信息。你想做的是把这些patch引入到你的
代码库中,最好是也可以把日志也引入进来, 方便以后维护用。传统的打patch方式是
patch -p1 & 0001--JFFS2-community-fix-with-not-use-OOB.patch
这样来打patch,但是这样会把这些有用的信息丢失。
由于这些patch显然是用git format-patch来生成的,所以用git的工具应该就可以很好的做好。
git-am 就是作这件事情。
在使用git-am之前, 你要首先git am –abort 一次,来放弃掉以前的am信息,这样才可以进行一次全新的am。
不然会遇到这样的错误。
.git/rebase-apply still exists but mbox given.
git-am 可以一次合并一个文件,或者一个目录下所有的patch,或者你的邮箱目录下的patch.
下面举两个例子:
你现在有一个code base: small-src, 你的patch文件放在~/patch/0001-trival-patch.patch
cd small-src
git-am ~/patch/0001-trival-patch.patch
如果成功patch上去, 你就可以去喝杯茶了。
如果失败了, git 会提示错误, 比如:
error: patch failed: android/mediascanner.cpp:452
error: android/mediascanner.cpp: patch does not apply
这样你就需要先看看patch, 然后改改错误的这个文件,让这个patch能够patch上去。
你有一堆patch, 名字是上面提到的那一堆patch, 你把他们放在~/patch-set/目录下(路径随意)
cd opencore
git am ~/patch-set/*.patch
(这里git就会按照文件名的顺序一次am这些patch)
如果一切顺利, 你所有的patch都OK了, 你又Lucky了。
不过不顺利的时候十有八九,如果git am中间遇到了patch,am就会停到打这个
patch的地方, 告诉你是哪个patch打不上去。
比如我现在有一个文件file,有两个patch.
file 的内容是
两个patch分别是:
0001-add-line.patch:
From 48869ccbced494eafa5a54f2a261df0f Mon Sep 17 00:00:00 2001
From: zhangjiejing &zhangjiejing@zhangjiejing-desktop.(none)&
Date: Thu, 22 Apr :34 +0800
Subject: [PATCH 1/2] add line
2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/file b/file
index 067780e..685f0fa 100644
--- a/file
+++ b/file
@@ -3,3 +3,5 @@ file:
+add line
0002-change-line.patch:
From f756e1b3a87c216b7e0afea9d15badd Mon Sep 17 00:00:00 2001
From: zhangjiejing &zhangjiejing@zhangjiejing-desktop.(none)&
Date: Thu, 22 Apr :19 +0800
Subject: [PATCH 2/2] change line
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/file b/file
index 685f0fa..7af
--- a/file
+++ b/file
@@ -1,6 +1,6 @@
-some text
+Change line text
git am *.patch
来merge这些patch, 报错, Patch failed at 0001 add line这样我们看0001这
个patch,原来patch需要的是some text, 而file里面是the text, 所以我们用编
辑器把这行改成some text,
git apply 0001-add-line.patch
git add file
git am --resolved
在解决完冲突以后, 比如用git add来让git知道你已经解决完冲突了。
如果你发现这个冲突是无法解决的, 要撤销整个am的东西。 可以运行git am –abort, 如果你想只是忽略这一个patch,可以运行git am –skip来跳过这个patch.
git format-patch经验
commit init
commit init
=============
A,B两人代码共有commit init
现在A改动到a=&b=&c
B想用补丁来升级
git format-patch init..c ==&产生三个补丁
001-commit-a.patch 对应从commit init出发升到a
002-commit-b.patch 对应从commit a出发升到b
003-commit-c.patch 对应从commit b出发升到c
即git format-patch x..y
是从共有的x出发一路一个一个升到y
=================
git am *.patch git会自动按文件名一级级升上去的
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:900021次
积分:7280
积分:7280
排名:第2593名
原创:124篇
转载:136篇
译文:11篇
评论:55条
(3)(1)(1)(3)(3)(2)(4)(1)(6)(24)(3)(1)(2)(2)(2)(1)(4)(4)(1)(1)(4)(3)(7)(4)(3)(9)(8)(14)(56)(29)(33)(11)(10)(2)(1)(4)(3)(1)

我要回帖

更多关于 git format patch n 的文章

 

随机推荐