如何使用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”,此种方式更为简洁灵活(推荐
使用
)
以上两种方式本人都成功试验过,绝对有效!!!