git diff 命令6种使用场景

Posted 苦咖啡-bit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git diff 命令6种使用场景相关的知识,希望对你有一定的参考价值。

目录

一、背景&目标

二、git三个区了解

三、git diff 6种场景介绍

3.1 工作区和暂存区差异对比

3.2 工作区和版本库之间差异

3.3 暂存区和版本库之间差异对比

3.4 本地版本库之间提交记录对比

3.5 不同分支对比

3.6 不同分支下同一文件对比

 四、git diff 中@@ -x1,y1 +x2,y2 表示的意思

4.1 demo

4.2 具体解释


一、背景&目标

在之前公司中大家合并代码都是自己解决冲突,然后提交一个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命令的使用场景介绍结束了,大家有问题的可以在评论区留言或私信我哦!

以上是关于git diff 命令6种使用场景的主要内容,如果未能解决你的问题,请参考以下文章

读懂diff

Git patch的使用方法和场景

Git patch的使用方法和场景

diff详解

git个人使用总结(命令版)

Linux - Shell - diff