Git 创建Patch
来源:互联网 发布:淘宝手机端首页模版 编辑:程序博客网 时间:2024/05/20 22:02
假设目前我们拥有一个master分支,现在已经在该分支上创建了新的commits,出于某种原因,我们需要把我们新的commits提取出来,并发送给某个需要它的人。下面是实现方法。
先熟悉下 git format-patch的参数 -num表示需要打包的commit的数量, -1表示只选择一条commit打包, -2表示2条。
多条连续commit的打包有两种表达方式:
第一种: git format-patch -5 【表示从最新的commit向前推5条都要打包】
第二种: git format-patch HEAD~5 【表示从最新的commit向前推5条都要打包】
【注意,打包的时候不包括HEAD~5这条记录】【可以使用commit的sha1值来替换HEAD~num表达式】
图释:
第一种:
last commit -->打包0005
6 commit -->打包0004
5 commit -->打包0003
4th commit -->打包0002
3rd commit -->打包0001
2nd commit
1st commit
第二种:
第一种:
last commit -->打包0005 (HEAD)
6 commit -->打包0004(HEAD~1)
5 commit -->打包0003(HEAD~2)
4th commit -->打包0002(HEAD~3)
3rd commit -->打包0001(HEAD~4)
2nd commit (HEAD~5)
1st commit
1.首先查看你的历史记录,确认你需要提取多少个commits,目前我们仅用最新的一个来做演示
$ git log --pretty=oneline -14f80ce0bbaa8c8eb9b410fef47cc569e2aa301c6 my patch
2. 抽取分支,如果仅抽取一个commit,就不需要自定义名字了
$git format-patch -1如果抽取多个,建议自定义一个名字,这样便于后期patch的使用。 !注意使用--stdout指向自定义的patch名
$ git format-patch -2 --stdout > newpatch
3. 查看下当前目录,你会发现目录里多了几个.patch文件,大部分是使用commit message命名的,唯一的一个是使用自定义的名字
4. 将所有.patch文件打包发送给需要的人就可以了
下面我们把这些patch使用到我们自己的分支上
1. 首先查看下patch的内容
$ git apply --stat 0001-my-patch.patch README | 1 + 1 file changed, 1 insertion(+)
2. 可以在进行下检查
$ git apply --check 0001-my-patch.patch
3. 下面进行应用
$ git am --signoff < 0001-my-patch.patchApplying: my patch注意--signoff会在原commit message基础上添加一行以sign off by开始的信息,详细内容请查阅git am --help
$ git log -1commit 03be3d49813cb0f3e50d85cac4d7228af93a7807Author: bing.wei <bing.wei@symbio.com>Date: Thu May 2 10:00:51 2013 +0800 my patch Signed-off-by: bing.wei <bing.wei@symbio.com>
更多技巧:
1. 指定某个commit的patch
$ git log -2commit 3de4eda5ad46f9d16d9ba86b69e172107988b38cAuthor: bing.wei <bing.wei@symbio.com>Date: Thu May 2 10:42:20 2013 +0800 new 2 Signed-off-by: bing.wei <bing.wei@symbio.com>commit 8d0a564024e20910b3a60fa2e68aaa72cdeb0cf5Author: bing.wei <bing.wei@symbio.com>Date: Thu May 2 10:42:12 2013 +0800 new 1 Signed-off-by: bing.wei <bing.wei@symbio.com>$ git format-patch -1 8d0a564024e20910001-new-1.patch
2. 指定某commit之后的所有commits的patch
$ git log --pretty=oneline -43de4eda5ad46f9d16d9ba86b69e172107988b38c new 28d0a564024e20910b3a60fa2e68aaa72cdeb0cf5 new 103be3d49813cb0f3e50d85cac4d7228af93a7807 my patchdcfaf683f61f041b987d9796145d5398dd0ffc31 niceAdministrator@B031-BINGWEI /d/app/eclipse/AndroidSC/gitpractice (master)$ git format-patch 03be3d49813cb0001-new-1.patch0002-new-2.patch
3. 从最后一条commit前推10条
$ git format-patch -10 <HEAD>0001-update2.patch0002-aa-revert.patch0003-Revert-aa-revert.patch0004-add-boy.txt.patch0005-test.patch0006-a.patch0007-commit-1.patch0008-my-patch.patch0009-new-1.patch0010-new-2.patch
或者
$ git format-patch HEAD~100001-update2.patch0002-aa-revert.patch0003-Revert-aa-revert.patch0004-add-boy.txt.patch0005-test.patch0006-a.patch0007-commit-1.patch0008-my-patch.patch0009-new-1.patch0010-new-2.patch
使用HEAD和~, ^的技巧
Administrator@B031-BINGWEI /d/app/eclipse/AndroidSC/gitpractice (master)$ git format-patch HEAD~30001-my-patch.patch0002-new-1.patch0003-new-2.patchAdministrator@B031-BINGWEI /d/app/eclipse/AndroidSC/gitpractice (master)$ git format-patch HEAD^^^0001-my-patch.patch0002-new-1.patch0003-new-2.patch
- Git 创建Patch
- 如何创建一个git patch
- 如何创建一个git patch
- 如何用git创建和应用patch
- git patch
- Git patch
- git patch
- git patch
- git patch
- git patch
- git patch
- git patch
- git patch
- git patch
- 根据差分包自动创建git可用的patch
- 创建patch
- patch/git patch使用经验
- use git send patch
- 平台添加新算法GPCR-AR
- 春秋战国——鬼谷子
- 纳兰的词
- 2012年3月18日
- 【转】AODV无线自组网按需平面距离…
- Git 创建Patch
- Alice's Piano_回溯
- poj_1288_回溯
- 浮点数保存
- poj_1154_回溯基础题
- poj_1166_枚举(或者递归/回溯)
- 2012年3月24日
- poj_1979_递归
- poj_1176_枚举