如何使用git比较两次commit之间的差异文件


有时候需要查看两次提交之间的差异。
只需下面几个步骤即可。
1、git log  查看提交历史 如下:
commit 5dab4a955535fcc42832ce33696489d8e8b232ec
Author: songchong <songchong@artekmicro.com>
Date:   Tue Aug 22 20:10:08 2017 +0800
    git commit 5th
commit c324747f80f9612f59dd7b575136261dd6dff01d
Author: songchong <songchong@artekmicro.com>
Date:   Tue Aug 22 20:07:32 2017 +0800
    git commit fourth
commit 2584c25bc1288e9519f78b53cda9081978c56735
Author: songchong <songchong@artekmicro.com>
Date:   Tue Aug 22 19:47:47 2017 +0800
    git commit three
commit b8b70ca89eb574a12b1b49c5f454d5e0525f60d6
Author: songchong <songchong@artekmicro.com>
Date:   Tue Aug 22 19:45:34 2017 +0800
    git commit two
commit d13fd344d51d042cf48a8acab43070550cff9ce4
Author: songchong <songchong@artekmicro.com>
Date:   Tue Aug 22 19:44:42 2017 +0800
    git commit one
如果我们想查看第四次和第五次提交之间的差异。可以用如下命令:
git diff hash1 hash2 --stat  

显示第四次和第五次这两次提交的差异文件 即:

songchong@srv-artek-pad:~/mytest/songchong$ git diff c324747f80f9612f59dd7b575136261dd6dff01d 5dab4a955535fcc42832ce33696489d8e8b232ec --stat
 test  |    4 ++--
 test2 |    3 ++-
 2 files changed, 4 insertions(+), 3 deletions(-)
songchong@srv-artek-pad:~/mytest/songchong$ 
2、可以看出,git列出了四五两次提交之间的差异文件是 test 和 test2.
如果想进一步查看test修改了那些地方:
只需将 git diff hash1 hash2 --stat 中的 --stat改为具体的文件即可
songchong@srv-artek-pad:~/mytest/songchong$ git diff c324747f80f9612f59dd7b575136261dd6dff01d 5dab4a955535fcc42832ce33696489d8e8b232ec test
diff --git a/test b/test
index 6d6cdbb..60781a8 100644
--- a/test
+++ b/test
@@ -1,6 +1,6 @@
+6666666666666666666
 llllllllllllllaaaa
+8888888888888888888
 dsfsdkgdfkghjjh
songchong@srv-artek-pad:~/mytest/songchong$ 

3、如果想将两次提交的差异部分提取成补丁文件:

git diff hash1 hash2 filename > patch_name
songchong@srv-artek-pad:~/mytest/songchong$ git diff c324747f80f9612f59dd7b575136261dd6dff01d 5dab4a955535fcc42832ce33696489d8e8b232ec test > testpatch
songchong@srv-artek-pad:~/mytest/songchong$ cat testpatch 
diff --git a/test b/test
index 6d6cdbb..60781a8 100644
--- a/test
+++ b/test
@@ -1,6 +1,6 @@
+6666666666666666666
 llllllllllllllaaaa
+8888888888888888888
 dsfsdkgdfkghjjh
4、如果想将多个文件的差异生成到同一patch文件 则:
git diff hash1 hash2 filename1 filename2 > patch_name 即:
git diff c324747f80f9612f59dd7b575136261dd6dff01d 5dab4a955535fcc42832ce33696489d8e8b232ec test test2 > testpatch  
生成补丁后,到相关目录里面可以打补丁。
pathc -p1 < patch_name
其中-p1是代表忽略当前目录下的几级目录。 在项目开发部署中,通常是将一个 Git 项目全量打包发布,但有的场景只需要导出有变更的那部分 文件 ,增量发布,此时就需要 使用 Git 导出增量包了,另一篇的版本ID打包相对麻烦, commit id 太长 一般复制前面7位。 一、对比 两个 commit 之间 差异 git diff commit -id-1 commit -id-2 1、"-"号开头的表示 commit -id-2 相对 commit -id-1 减少了的内容。 2、"+"号开头的表示 commit -id-2 相对 commit -id-1 增加了的内容。 二、对比 两个 commit 之间 某个 文件 差异 git diff commit -id-1 commit -id-2... 以表格的形式展示改动 文件 的列表,会展示 文件 的完整路径,本文中已经有样例。想要统计某 两次 提交记录 之间 的所有改动 文件 ,方便对线上项目进行增量更新。numstat后面接的是需要对比的 两次 提交记录的id,前后顺序没有关系。会统计 文件 的改动情况,但是不会展示改动 文件 的路径,本文中已经有样例。numstat表示以表格的形式展示改动 文件 ,并且 文件 路径是完整路径。不然路径中存在中文时会显示为“\126\326\”这样的数字。 使用 diff命令来列出 两个 版本 之间 的改动 文件 使用 diff命令来统计 两个 版本 之间 的改动 文件 git 本身是有tags功能的,在不同的tag 之间 切换是非常方便的,但是现在有一个需求就是:需要找出 两次 提交(有前后关系的) 之间 差异 文件 ,这一般用在需要增量升级的系统中。找了一下,似乎没有直接的命令可以达到这个目的,只好曲线救国了,幸亏找到了方法! git 的日志查看功能,可以看到每次提交的ID$ git log --name-only commit 47f88153de2dc2f48a13908a10... 如,导出fedoc.zip压缩包,其内容为test与master分支对比发生变化的内容: git archive test $( git diff master --name-only)|gzip >1.zip(执行指令时应在test分支) 注意:只适合修改的 文件 ,如果 文件 有增删就会有问题。 导出某 两次 提交 之间 差异 文件 (包含... diff -- git a/new.txt b/new.txt 第二行 index 后面 两个 数字表示 两个 文件 的 hash 值(index 区域的 0e9cc9b 对象,与工作目录区域的 af0a351 对象进行 比较 )。最后的六位数字是对象的模式(100代表普通 文件 ,644代表权限): index 0e9cc9b..af0a351 100644 第三行表示进行 比较 两个 文件 : const LCL = require ( 'last- commit -log' ) ; const lcl = new LCL ( ) ; // or `new LCL(dir)` dir is process.cwd() by default 异步 使用 使用 Promise: . getLast Commit ( ) . then ( commit => console . log ( commit ) ) ; 同步 使用 : const commit = lcl . getLast Commit Sync ( ) ; 提交信息是一个像这样的对象: " git Tag " : " 2.0 把 文件 提交到仓库 git commit -m "wrote a readme file" -m后面输入的是本次提交的说明1 file changed :1个 文件 被放置3 insertions :插入了3行内容 为什么要两步走? add + commit 因为 commit 可以一次提交很多 文件 ,所以可以多次add不同的 文件 查看仓库当前状态 git status 查看仓库 文件 git ls-files 查看 差异 git diff <yourfile> git log git log --pretty=o 公司要迁移 git 仓库,从仓库A迁移到仓库B,为了保留 commit 信息,特整理了两种方便的方式实现 git 仓库快速迁移,以及其他同事能快速切换库的建议。 第一种: 使用 镜像推送 git push --mirror,这种方式网上都有,算是个人的一个最终整理 第二种:通过添加多远程源,直接将代码从“仓库A远程源1“推送到“仓库远程源2”,此种方式更为简洁灵活(推荐 使用 ) 以上两种方式本人都成功试验过,绝对有效!!!