Git的命令git diff和git diff --cached的作用

发布时间 2023-05-09 22:04:01作者: HelloBlogWorld

1.首先看一下diff

 举一个例子,比较文件t.txt和tc.txt这两个文件的差异性

diff也是GNU/LINUX生态系统中的一个重要的工具,众所周知的是,linux的很多很多工具都是可以协作使用的。比如Git中就借助了diff这个文件差异性工具

 2.关于git diff:比较本地文件和暂存区(staging area, index area)文件的差异

这是我的一个git仓库以及仓库的状态:没有要提交到暂存区和工作树上的内容

 

下面我修改了f1中的内容

 

输入命令git status

 

显示的是f1文件被修改,而且文件的表示变化没有提交到暂存区

输入命令git diff

 暂存区的文件是没有最后一行的,本地的文件f1新增了一行

git diff的作用就是比较本地文件和暂存区文件,如果有差异,则显示

 

 

输入命令git diff --cached

 什么都没有。因为git diff --cached的作用是比较暂存区的文件和工作树上的文件的差异。

 

输入git add f1将文件f1提交到暂存区

再次输入git diff

 发现没有什么变化,因为我刚刚把f1从本地仓库提交到暂存区,而git diff的作用就是比较本地和暂存区文件的差异

 

输入git diff --cached

 注意git diff --cached的就是显示暂存区文件和工作树文件的差异

 

使用git commit -m "This is my commit to learn diff"将暂存区的文件提交到工作树

可以预见的是输入git diff --cached之后没有任何显示

 

 

3.总结

想象一下有三个区域:本地仓库、暂存区、工作树,在这上面都有一个相同的文件f

git diff 显示本地仓库的文件和暂存区的文件的差异

git diff --cached 显示暂存区文件和工作树文件的差异

没有修改文件f之前,输入git diff 或者git diff --cached当然不会有任何显示

如果在本地对文件做了修改但是没有提交到暂存区,那么git diff 显示的就是暂存区的f和本地f的差异

使用git add f将文件f提交到暂存区之后,本地文件f和暂存区文件f就没有差异了,但是这是暂存区文件f就和工作树文件f就有差异了

使用git commit -m "Input commit message"将暂存区文件f提交到工作树之后,三个区域的文件f就是相同的文件,此时使用命令git diff 和git diff --cached将不会有任何的显示

4.关于Linux

GNU/LINUX操作系统是一个Unix-like操作系统,它继承了unix系统的设计理念,也就是操作系统中的所有软件都可以而且有必要协作完成一个任务,Linux中生态体系中的很多工具如

GCC, Git, Make, GDB, Vim, diff等等都是程序员必须掌握的工具。