文档章节

使用git命令提取两次提交之间的差异文件

阿信sxq
 阿信sxq
发布于 2016/08/25 14:49
字数 510
阅读 170
收藏 0

git本身是有tags功能的,在不同的tag之间切换是非常方便的,但是现在有一个需求就是:需要找出两次提交(有前后关系的)之间的差异文件,这一般用在需要增量升级的系统中。

找了一下,似乎没有直接的命令可以达到这个目的,只好曲线救国了,幸亏找到了方法!

git的日志查看功能,可以看到每次提交的ID

$ git log --name-only
commit 47f88153de2dc2f48a13908a109b7dca991f8730
Author: 阿信sxq <songxinqiang@vip.qq.com>
Date:   Wed Aug 24 15:15:41 2016 +0800

    为下个版本修改版本号

pom.xml

commit 309632842c80d95f5f316aded1bef538ca8fd99a
Author: 阿信sxq <songxinqiang@vip.qq.com>
Date:   Wed Aug 24 14:53:13 2016 +0800

    删除多余的注释

src/main/java/cn/songxinqiang/tool/ConfFileUtil.java

拿到了ID就可以定位每一次的提交。

突破点就在git diff命令,查看差异,这个命令有很多参数样式,我们这里需要的是查看两次提交之间的差异文件,但是我们不关心文件内容,只关心文件名及路径,所以我们这样做

$ git diff 2362accf3e7be23e30  47f88153de2dc2f48a1 --name-only
pom.xml
src/main/java/cn/songxinqiang/tool/ConfFileUtil.java

于是就可以看到两次提交之间的变化文件了。这里需要说明的是,diff后面的两个ID,前一个是开始的ID后一个是结束的ID,在这两次(包含结束不包含开始)之间的变动文件就会列表出来。

拿到了文件的路径列表,接下来就好办了,配合xargs命令我们简单点,直接打包出来

$ git diff 2362accf3e7be23e30  47f88153de2dc2f48a1 --name-only | xargs tar -zcvf diff.tar.gz
pom.xml
src/main/java/cn/songxinqiang/tool/ConfFileUtil.java

这个命令需要在仓库的根路径执行,因为给出的文件路径是基于根路径的,打包命令根据需要修改,也可以使用cp命令进行,这个命令执行后产生了一个叫做"diff.tar.gz"的文件,解压之后就是所列的文件。

 

© 著作权归作者所有

共有 人打赏支持
阿信sxq

阿信sxq

粉丝 227
博文 83
码字总数 73652
作品 1
成都
后端工程师
私信 提问
行者.孙/updiff

updiff 是什么? updiff 是一个增量更新(升级)的工具,支持备份、更新、异常恢复功能。依据 Git 两个提交版本号提取差异文件进行更新操作。依赖maven、git并可以和jenkins无缝隙集成。 updi...

行者.孙
2015/08/24
0
0
git diff比较不同commit版本的代码文件异同

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/83095778 git diff比较不同commit版本的代码文件异同 如图,假设像知道app目录下的bui...

zhangphil
2018/10/16
0
0
Git使用手册2 —— 基础操作(中)

三、 查看提交历史 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史. 完成这个任务最简单而又有效的工具是 命令。 接下来的例子会用我专门用于演示的 simplegit 项目,...

常大鹏
2016/06/19
0
0
git常用使用场景总结

git提取出两个版本之间的差异文件并打包 两次提交之间的差异: 两个版本之间的差异: 修复 Bug 流程示例 说明: devv2.0.1 是最新版,devv2.0.2 为当前正在开发的分支 解决bug示例: 如当前开...

风清扬-深圳
2016/08/08
17
0
Git常用指令记录

简介 git有漂亮的WEB界面 非常自由的本地commit(不用担心是否影响到他/她人)操作稍微复杂了一点点。 git属于分布式的版本管理工具。每个人都有全部的提交历史。 通过git push 和 git pull...

go-skyblue
2015/12/16
213
0

没有更多内容

加载失败,请刷新页面

加载更多

rabbitMQ 在spring 的使用

一、准备工作 maven依赖 <dependency>  <groupId>com.rabbitmq</groupId>  <artifactId>amqp-client</artifactId>  <version>4.0.2</version></dependency> <dependency......

狼王黄师傅
昨天
1
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
1
0
大数据教程(11.8)Hive1.2.2简介&初体验

上一篇文章分析了Hive1.2.2的安装,本节博主将分享Hive的体验&Hive服务端和客户端的使用方法。 一、Hive与hadoop直接的关系 Hive利用HDFS存储数据,利用MapReduce查询数据。 二、Hive与传统数...

em_aaron
昨天
3
0
跟我学Spring Cloud(Finchley版)-15-Hystrix监控详解

Hystrix提供了监控Hystrix Command的能力,本节来详细探讨。 监控端点与数据 应用整合Hystrix,同时应用包含spring-boot-starter-actuator 依赖,就会存在一个/actuator/hystrix.stream 端点...

周立_ITMuch
昨天
6
0
day26:shell题

1、 判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor id一行中。 如果其生产商为AuthenticAMD,就显示其为AMD公司; 如果其生产商为GenuineIntel,就显示其为Intel公司; 否则,...

芬野de博客
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部