Git:关于git diff 是和谁对比的问题

今天看了廖雪峰的关于git的教程,发现了一个diff问题,弄了很多遍,终于弄清了,git diff 到底是和暂存区(index)还是和版本库对比的问题,记录一下。

首先我新创建一个文件,如下图所示:

touch test.txt
ls 

上述命令会产生一个test.txt文本,如下图所示:
这里写图片描述
用命令查看一下当前git仓库的状态:

git status

这里写图片描述
会显示有未被追踪(untracked)的文件。接下来我们先git diff 一下:

git diff test.txt

这里写图片描述
没有反应,那我们add一下之后,再git diff:

git add test.txt
git diff test.txt

这里写图片描述

没有任何反应,好,我们commit一下,然后修改test.txt文件,加上一串字符串‘111111’:如下图所示:

git commit -m "add a file named test.txt"
vim test.txt
git diff test.txt

这里写图片描述

现在你看,diff结果出来了,看来当临时区(Index)为空的时候,工作区进行了修改,也是可以比较的,是否是和上一次的提交记录进行的比较吗???、让我们继续往下进行:

git add test.txt
git diff test.txt

这里写图片描述
你看,没有结果,现在的情况是工作区和临时去的内容是一致的,因为git add 的作用就是把工作区的内容添加到临时区。现在两者一致了git diff 就没内容了,好,现在我们不着急提交(commit),我们修改一下工作区的test.txt(增加2222。。。字符串),然后看一下git diff的结果:

vim test.txt
git diff test.txt

这里写图片描述

现在显示的结果是:
11111.。。。这个应该是工作区和临时区一致,所以前面没有+号
222222这个字符串应该是工作区有,临时去没有,所以前面有+,
到这一步,我们可以大致猜出来,当临时区为空的时候(工作区有修改)是和上一次的提交记录对比的,如果工作区有内容,那么就是和工作区的内容对比的。
好了,继续:

git add test.txt
git diff test.txt  #没有内容显示
git commit -m "modify the test by add the 1111and 222"
git diff test.txt #没有显示内容

ok,到此结束,结论:

1,当工作区有改动的时候,临时区为空(没有进行git add),那么diff的对比是和上次的commit的记录进行对比的。
2,当工作区有改动,临时区有东西的时候,diff是和临时区进行比较的。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页