工作目录内容跟踪了才能用git diff
在工作区新添加的内容新建文件或新添加内容,只有没有执行git add .或git add
无论工作区中的文件怎么变化
git diff 都是没有任何反应的
git diff –cached #是暂存区(stage)和版本库的比较
stage或cache与虽说是暂存区,缓冲区,但commit并不是像想像那样把这个区清空,估计只是打个同步的标志,内容还在。git add是把工作区的更新提交到暂存区,git commit是把暂存区内容更新到仓库。所以经过add, commit,修改再add,再修改,有可能会出现工作区、缓冲区、和仓库三者都不同。
使用:git diff 是你工作区跟statge的比较,这个时候可以看你开发过程中修改了哪些内容 git diff –cached 是看你stge区和仓库分支上的比较,你add后但是没有commit, 这个时候只是在stage中,可以确认下修改是否正确,如果正确无误可以commit合并到分支。
Git管理的是修改,一个文件经过了多次修改,但是如果不add到暂存区,那就不会加入到commit。
新增了一行,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,创建一个新文件,也算一个修改,删除文件也可以是个修改。(更改.gitignore中的文件不是修改)。
git add命令只是把工作区当前的修改提交到暂存区中。
git commit一次将暂存区中的内容提交到版本库中。
为了防止工作区的修改没有被提交到暂存区中,或则查看工作区和暂存区之间的差异,可以使用git diff指令。
此外,还可以 git diff HEAD -- file
# 比较的是工作区中的文件与版本库中文件的差异。
廖雪峰关于工作区暂存区的讲解
廖雪峰管理修改
今天看了廖雪峰的关于git的教程,发现了一个diff问题,弄了很多遍,终于弄清了,git diff 到底是和暂存区(index)还是和版本库对比的问题,记录一下。
首先我新创建一个文件,如下图所示:
touch test.txt
ls
上述命令会产生一个test.txt文本,如下图所示:
用命令查看一下当前git仓库的状态:
git status
会显示有未被追踪(untracked)的文件。接下来我们先git diff 一下:
git diff test.txt
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是和临时区进行比较的。
https://blog.csdn.net/whbing1471/article/details/52065448