转自: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. 一段曲折的copy路程

    cp 的时候出现:-bash: /bin/cp: Argument list too longcp ./*.swf  /www/img/html/xxx/action/ 解决办法:find ./ -n ...

  2. eclipse 修改Java代码 不用重新启动tomcat

    例子: 1.在tomcat server.xml文件配置加上这句话: <Context debug="0" docBase="C:\Users\admin\Desk ...

  3. Match the string--hdu1797(模拟)

    http://acm.hdu.edu.cn/showproblem.php?pid=1797 就是模拟 我的思路是标记aba 和h的位置 然后就判断是否正确  就行了 还有就是  最后 fkfkfkf ...

  4. Two Sum(hashtable)

    Given an array of integers, find two numbers such that they add up to a specific target number. The ...

  5. HDU 1114 【DP】

    题意: 给你空钱袋的质量和装满钱的钱袋的质量. 给你先行的n种货币的面值和质量. 问钱包里的钱最少是多少. 如果质量不可行,输出impossible. 思路: 完全背包. 屌丝有个地方没想通,就是如何 ...

  6. HDU 3938

    并查集的离线算法. 题意是大坑.理解为寻找两点之间所有路径中的最长的边的值小于输入的值的点对的个数. 直接来代码. #include<stdio.h> #include<iostre ...

  7. 2017年icpc西安网络赛 Maximum Flow (找规律+数位dp)

    题目 https://nanti.jisuanke.com/t/17118 题意 有n个点0,1,2...n-1,对于一个点对(i,j)满足i<j,那么连一条边,边权为i xor j,求0到n- ...

  8. Spring的JDBC示例

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/jdbc-framework-overview/spring-jdbc-example.html: ...

  9. 剑指Offer面试题43(Java版):n个骰子的点数

    题目:把n个骰子仍在地上.全部骰子朝上一面的点数之和为s,输入n,打印出s的全部可能的值出现的概率. 解法一:基于递归求骰子的点数,时间效率不够高 如今我们考虑怎样统计每个点数出现的次数. 要向求出n ...

  10. MySQL 当记录不存在时插入,当记录存在时更新

    第一种: 示例一:插入多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句: INSERT INTO clients (client_id,client_name ...