转自:http://smilejay.com/2012/08/generate-a-patch-from-a-commit/

在看一个Bugzilla上Xen的一个bug时,提到要revert掉Dom0(用linux.git)中一个commit,当然git是有revert命令的,如下所示。

[root@jay-linux linux.git]# git revert cd9db80e5257682a7f7ab245a2459648b3c8d268
warning: too many files (created: deleted: ), skipping inexact rename detection
Finished one revert.
[detached HEAD aab6b2f] Revert "xen/pciback: Support pci_reset_function, aka FLR or D3 support."
files changed, insertions(+), deletions(-)

(BTW,由于那个commit后的改动太多,可能会导致直接revert掉后不能编译成功(或功能不正常);所以如果真正revert一个commit后要提交时,要做好评估。)

然后,我想看一下这个commit的patch是怎么样的,做了哪些改动,就需要Git根据一个commit SHA-1值生成一个patch,可以使用如下两种方式。
1. git format-patch -1 commit :生成的patch有统计信息和git的版本信息
2. git diff commit_previous commit > mypatch.diff :最原始的diff信息,对于这里的commit_previous(commit之前一个commit),可以使用“commit^”来表示,这样比较方便,不易出错。
实际命令演示如下:

[root@jay-linux linux.git]# git format-patch - cd9db80e5257682a7f7ab245a2459648b3c8d268
-xen-pciback-Support-pci_reset_function-aka-FLR-or-D3.patch
(前部有统计信息;结尾有“--1.7.”这样的git版本标志。) [root@jay-linux linux.git]# git diff cd9db80e525^ cd9db80e525 > diff.patch

在commit SHA-1值不重复(冲突)的情况下,可以只写前面几位字符即可(如上面的git diff命令中那样使用)。

第一种方式,除了最重要最基本的diff信息之外,还有如下信息:

From a8d30220510cb1d8eac18746570cb52214ac65d7 Mon Sep  ::
From: Jay <smile665@gmail.com>
Date: Tue, Jun :: +
Subject: [PATCH] move libvirt config files to a dedicated directory ---
config/libvirt/hotplug.xml | ++
config/libvirt/rhel6u3_virsh.xml | ++++++++++++++++++++++++++++++++++
config/libvirt/win8_virsh.xml | ++++++++++++++++++++++++++++++++++++++
files changed, insertions(+), deletions(-)
create mode config/libvirt/hotplug.xml
create mode config/libvirt/rhel6u3_virsh.xml
create mode config/libvirt/win8_virsh.xml (中间是基本diff的信息)
diff --git a/config/libvirt/hotplug.xml b/config/libvirt/hotplug.xml
new file mode
index ..dc85c22 (最后的git版本信息)
--
1.7.

更多信息,可以:man git-format-patch 和 man git-diff

git根据commit生成patch(转载)的更多相关文章

  1. git 生成patch 和打入patch

    转载:https://blog.csdn.net/liuhaomatou/article/details/54410361 平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用gi ...

  2. git 生成patch和应用patch【转】

    本文转载自:http://www.jianshu.com/p/814fb6606734 1.在git源码目录下执行 1.1.两个commit间的修改(包含两个commit) git format-pa ...

  3. 如何使用git 生成patch 和打入patch【转】

    本文转载自:http://blog.csdn.net/liuhaomatou/article/details/54410361 平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用 ...

  4. 如何使用git 生成patch 和打入patch 标签: gitpatch【转】

    本文转载自:http://blog.csdn.net/liuhaomatou/article/details/54410361 平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用 ...

  5. git diff 生成patch, git apply patch 打补丁方法说明,以及分支管理的简单操作。

    git diff 简易操作说明 先git log 查看commit ID, 记录你想要打的补丁的ID 比如说: git log commit 4ff35d800fa62123a28b7bda2a04e ...

  6. 如何用git命令生成Patch和打Patch

    在程序员的日常开发与合作过程中,对于code的生成patch和打patch(应用patch)成为经常需要做的事情.什么是patch?简单来讲,patch中存储的是你对代码的修改,生成patch就是记录 ...

  7. 【Git】生成Patch和使用Patch

    1.生成Patch(俗称快照) 先来看看repo manifest 的用法 <1>cd /工作目录/项目目录/.repo/manifests <2>repo manifest ...

  8. git 生成patch和打patch

    有这样的 目录层次 x/xx/xxx/xxx/ttt.c而 我的 当前位置 是在 x/下 ,执行git diff> test.patch 在test.patch补丁文件里的路径信息是这样的:- ...

  9. python解析git log后生成页面显示git更新日志信息

    使用git log可以查到git上项目的更新日志. 如下两个git项目,我想把git的日志信息解析成一个便于在浏览器上查看的页面. https://github.com/gityf/lua https ...

随机推荐

  1. Python基础教程笔记——第1章

    1.8 函数 pow(x,y) x^y abs(x)          取数的绝对值 round(x)   会把浮点数四舍五入为最接近的整数 floor(x)     向下取整的函数,但是需要先imp ...

  2. Python中排序的灵活使用

    Python中列表按指定标准排序实例 概述 本题需要先输入机器的数目和任务的数目. 在接下来的n行中每行分别包含机器的最大执行时间和机器所能执行任务的最大强度. 在接下来的n行中每行分别包含任务执行时 ...

  3. sublime text 3注册码

    —– BEGIN LICENSE —– Michael Barnes Single User License EA7E-821385 8A353C41 872A0D5C DF9B2950 AFF6F6 ...

  4. Org-mode五分钟教程ZZZ

    Table of Contents 1 源起 2 简介 2.1 获取 org-mode 2.2 安装 3 基础用法 3.1 创建一个新文件 3.2 简单的任务列表 3.3 使用标题组织一篇文章 3.4 ...

  5. 百度统计的JS脚本原理解析

    一句话:在你的网站上加载百度统计的脚本,这个脚本会收集你的本地信息,然后发送给百度统计网站 https://blog.csdn.net/iqzq123/article/details/8877645 ...

  6. ArcGIS Server 9.3集群部署(多som+多soc)

    关键字:集群 SOC 分布式 ArcGIS Server http://t.cn/8F8yPF3 http://t.cn/8F8yM4b http://www.netfoucs.com/nj19862 ...

  7. 【APUE】进程间通信之共享存储(mmap函数)

    共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式,因为进程可以直接读写内存,而不需要任何数据的拷贝.对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只 ...

  8. 再谈OpenCV

    虽然之前写过一篇关于OpenCV的介绍(http://blog.csdn.net/carson2005/article/details/5822149).但依旧有朋友对其不甚了解.所以,常常能碰到有人 ...

  9. 【Mongodb教程 第十课 】MongoDB 备份

    MongoDB 数据转储 创建备份MongoDB中的数据库,应该使用mongodump命令.此命令将服务器的所有数据转储到转储目录.有许多可供选择,通过它可以限制的数据量或创建备份您的远程服务器. 语 ...

  10. centos 安装mysql时错误unknown variable &#39;defaults-file=/opt/redmine-2.6.0-2/mysql/my.cnf&#39;

    找到my.cnf所在目录.运行 chmod 664 my.cnf,再启动mysql成功