Git

Git 导出某两次提交之间的差异文件

2017-07-25  本文已影响0人  聪了个颖

查看差异文件

要导出Git仓库中某两次提交之间的文件差异,必须要先知道有哪些文件发生了差异。git diff指令能很方便的协助我们完成这样的操作。
本次课题中所使用到的git diff指令的用法是git diff COMMIT_ID_1 COMMIT_DI_2,其中的COMMIT_ID_X就是通过git log指令查看到的提交ID。一般情况下,commit_id取前六位就可以了。
以下就是我随便在一个仓库执行以上指令的结果截图:

git diff 指令执行结果
显然,改指令是可以列出两次提交的具体结果,但是我们只需要那些文件发生改动,并不需要如此具体到行的结果。
经过查阅相关资料,发现--name-only参数可以使得git diff的结果非常简练。
git diff --name-only执行结果

打包

仔细观察git diff --name-only指令的执行结果,这不正是这些文件在根目录中的相对地址嘛?结合xargs指令可以非常快速地将差异文件给打包了。我比较习惯用tar指令进行压缩。
本次执行的指令如下

git diff --name-only 7f1caef cc011f5 | xargs tar -zcvf /d/a.tar.gz

查看D盘目录,确实生成了a.tar.gz文件,里面的目录结构和项目的结构保持一致,并且只包含差异文件,如下图所示。

生成的差异文件压缩包

注意点

快捷用法

以上的COMMIT_ID_X其实可以用HEAD[1]来代替,比如HEAD表示当前提交,HEAD^表示上一次提交,HEAD^^表示上上次提交,所以我们输出当前和上次提交的差异就可以写成这样git diff --name-only HEAD^ HEAD。其中可以省略后面的HEAD,因为指令会默认拿HEAD^和当前提交作比对;
还有一种写法:HEAD~0表示当前提交,HEAD~1表示上一次提交,HEAD~2表示上上次提交,以此类推。


  1. 关于Git中的HEAD定义,《Git版本控制管理中》是这样描述的:「HEAD始终指向当前分支的最近提交。当切换分支时,HEAD会更新为指向新分支的最新提交」。

上一篇 下一篇

猜你喜欢

热点阅读