一、背景&目标
在之前公司中大家合并代码都是自己解决冲突,然后提交一个MR,具体负责人只是进行简单的代码查看和MR,所以并没了解过git其他命令,因为用不到。但是最近小伙伴们一个需求少的会创景3-4个分支,多的有7-8个分支,上线时自己合并代码是一件比较“艰难”的事情,所以我们需要git的diff 命令来查看具体区别,但是diff 有多种使用场景下面我们来了解一下;
二、git三个区了解
因为diff的介绍是离不开这三个区,所以优先了解一下这三个区;
Git中的划分为工作区(Working Directory),暂存区(Index,也就是Stage区),版本库(也就是每次提交commit以后的版本)
工作区、暂存区、本地版本库三个区具体讲解见文章:git 工作区、暂存区、版本库三个区域介绍
三、git diff 6种场景介绍
3.1 工作区和暂存区差异对比
3.1.1 工作区和暂存区之间的差异
git diff --stat
这个命令展示工作区和暂存区之间有区别的文件,以及该文件中有多少区别;
从这里可以看到工作区和暂存区之间有2个文件被修改过,每个文件中有1处改动;
3.1.2 工作区和暂存区之间的详细差异
git diff
这个命令显示的是详细的差异,比如是哪个文件中的哪行有变化;
相比上面对比情况来看,工作区和暂存区(index 2e6f7ce...)中文件有区别,具体去区别会在下面展示。看上面1、2、3 发现1说明了工作区和暂存区中哪个记录有区别,2中列出了具体文件,3中展示具体文件中具体区别;
3.2 工作区和版本库之间差异
3.2.1 工作区和版本库之间差异
git diff HEAD --stat
git diff commit_id --stat
这个命令展示工作区和版本库之间有区别的文件,以及该文件中有多少区别;
可以看到这里是有2个文件被修改了,每个文件中只修改了1处;
3.2.2 工作区和版本库之间详细差异
git diff HEAD
git diff commit_id
和之前工作区和暂存区一样,详细展示了具体差异;
3.3 暂存区和版本库之间差异对比
如果需要比较暂存区和版本库之间的差异,需要添加–cahced ,其他的指令类似,包括–stat;
git diff --cached HEAD --stat
git diff --cached commit_id --stat
暂存区和本地版本库之间差异,因为在本地修改后没有执行git add . 所以目前修改的东西都在工作区,所以暂存区和本地版本库是一致的;
git diff --cached HEAD
git diff --cached commit_id
3.4 本地版本库之间提交记录对比
3.4.1 本地版本库之间提交记录整体对比
git diff e8f4da5267e 2a010f1ff6 --stat
查看本地版本库之间的差异,具体执行如下:
展示两个commit 之间有1个文件被修改了,改动有4行;
3.4.2 本地版本库之间提交记录详细对比
git diff e8f4da5267e 2a010f1ff6
展示具体文件之间的区别
从执行结果看到老文件的从199行开始有10行代码变动,而新文件中从199行开始有6行变动;
3.5 不同分支对比
3.5.1 两个分支整体对比
git diff branch1 branch2 --stat
可以看到branch1和branc2两个分支有20个文件被改动,新增191行,删除64行;
3.5.2 两个分支详细对比
git diff branch1 branch2
和其他对比是一样的,详细展示两个分支之间具体文件中的不同;
3.6 不同分支下同一文件对比
上面两种是来看分支之间不同的,但是没法对比两个分支中同一个文件具体有哪些区别,可以使用下面命令来对比;
说明:如果是代码 则分支后面不用加“--” 就能对比,但是配置文件不行,所以如果查看配置文件的区别还是要添加“--”的;
git diff master_12 release_12 -- src/main/resources/bootstrap-dev.yml
不同分支,同一个文件对比如下:
从上面文件看,这个文件是新建的,之前老文件没有,新文件中有影响的32行;
四、git diff 中@@ -x1,y1 +x2,y2 表示的意思
其实从上面我们也可以看到,只要是明细对比总会有@@-x1,y1 +x2,y2这样的值,那这些值代表什么那,如果明白这些会对我们有很大帮助,下面来看看具体代表含义;
4.1 demo
4.2 具体解释
@@后面的两个数字:“-19,7”,表示a文件中第19行开始的后面7行,“+19,6”表示以下数据是b文件中第19行开始后的后面6行。其中“-”表示a文件,“+”表示b文件。下一行用“-”号开头的表示a文件变成b文件的时候,这一行被删除。用“+”开头的则表示a文件变成b文件的时候,这一行被加入。没有正负号开头的部分则表示没有进行修改。
OK到这里git中diff命令的使用场景介绍结束了,大家有问题的可以在评论区留言或私信我哦!
版权归原作者 bit-caffe 所有, 如有侵权,请联系我们删除。