git diff 比较三大区域的内容:working tree, index, commit

目录

1、背景分析

2、git diff 如何比较三大区域的内容?

2.1 git diff :比较工作树和暂存区,查看工作树中已暂存文件的变化,与是否提交至仓库无关。

2.2 git diff HEAD:比较工作树和仓库,查看工作树中已暂存文件和仓库的变化,与修改文件是否加入暂存区无关。

2.3 git diff --cached:比较暂存区和仓库,查看仓库文件在暂存区的变动。

3、 比较某个文件的变化

4、比较仓库之间的变化


1、背景分析

学习git肯定知道git 比较常用的三大区域:工作树、暂存区、仓库。(虽然名字有多种版本,但是大意相同)

(配图:网上随便找的)

而最先引起git关注的其实是暂存区,只有进入暂存区,git才会认识你,把你当做“自己人”

 

2、git diff 如何比较三大区域的内容?

这里的比较不针对某个具体文件,只是大概念,对三个区域而言的比较。

正如上面1说讨论的,git diff 在不加参数的情况下,更多的关注的是暂存区(已暂存文件 tracked files)的变化

注:下面内容的文件改变统一定义为:文件被修改,或被移动、或被删除

(下面标题中的冒号‘:’,不是命令,仅仅是解释说明的作用。)

2.1 git diff :比较工作树和暂存区,查看工作树中已暂存文件的变化,与是否提交至仓库无关。

相当于:  git diff  working-tree(tracked files)   index(teacked files)

情况分析:

(1)一个文件加入了暂存区,但是还没有提交到仓库,如果该文件改变了,git diff 就会显示文件的变化。

如下:黑色表示工作树文件、绿色表示暂存区。

按照分析,如果1中该文件发生改变(如下),git diff会显示变动。

 

(2)如果仅仅是工作树中未暂存文件(untracked files)的改变,git diff将没有任何显示。

像下面这样,git diff将没有任何显示。

 

2.2 git diff HEAD:比较工作树和仓库,查看工作树中已暂存文件和仓库的变化,与修改文件是否加入暂存区无关。

注:head指向最近一次的提交。

相当于:  git diff  working-tree(tracked files)   commit(tracked files)

情况分析:

(1)一个文件已提交到仓库,如果该文件改变了,git diff head 就会显示文件的变化。

改变后还没有添加到暂存区,git diff head 就会显示文件的变化。

改变后,添加到暂存区,git diff head 还是会显示文件的变化。

 

(2)如果仅仅是工作树中未暂存文件的改变,git diff head 将没有任何显示。

 

2.3 git diff --cached:比较暂存区和仓库,查看仓库文件在暂存区的变动。

相当于:  git diff  index(teacked files)  commit(tracked files)

情况分析:

一个文件已提交到仓库,如果该文件改变了,并且提交到暂存区时,git diff --cached 就会显示文件的变化。

如果改变后,还没有添加到暂存区,git diff --cached 将没有任何显示。

 

3、 比较某个文件的变化

如果明白了上面的内容,这个就很简单了!因为上面比较三大区域的变化是没有加入文件路径参数的,那么默认是所有文件的变动,如果针对某个文件而言,只需要指出该文件路径即可。

例如:git diff file.txt,查看已加入暂存区的文件file.txt,如果文件在工作树中改变,就会显示变动情况,如果没有改变就不显示。

如果该文件都没有添加到暂存区,那么这个命令就没有意义。

 

4、比较仓库之间的变化

提交后,就变成了仓库的历史版本,看名字就知道只是比较仓库,不存在暂存区和索引。

命令样式:git diff [<options>] <commit> ... <commit> [ - ] [<path> ...]

举例:git diff sha1 sha2   #比较哈希值为sha1 和哈希值为sha2的两个版本的仓库的区别。如果比较某个文件只需要在后面加入路径就可以了。


推荐阅读:官方文档:https://git-scm.com/docs/git-diff

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值