例如:在D盘中新建文件夹test,在test文件夹中 git init demo 初始化一个版本,在demo中新建一个a.txt文件,a.txt中输入数字 1
使用git add . 将a.txt 添加到暂存区中,此时 使用 git diff 命令,也不会出现任何修改信息,因为此时暂存区内文件和本地开发文件是一样的。
git diff head
查看已缓存的与未缓存的所有改动:
git diff HEAD
显示的是已提交到工作树中文件和未提交到工作树中文件的所有修改。
1、当没有对demo版本库执行过git commit命令时,执行git diff head会报警告,警告翻译放到下面了,记下我自己的理解,因为head是指向当前版本库中master的,因为在此之前没有执行过提交命令,所以版本库中是空的,所以找不到目前的工作树。
warning: ignoring dangling symref head
警告:忽略悬挂的symref头
fatal: ambiguous argument 'head': unknown revision or path not in the working tree.
不明确的参数'head':未知的修订或路径不在工作树中。
Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]'
使用“——”将路径与修订分开,如下所示:
“git命令> < <修改>…
)——(<文件>…)”
2、执行git commit命令,将上面的a.txt提交到工作树中,再执行git diff head依旧无任何修改区别显示。
3、修改下 a.txt文件,在a.txt中添加 3 ,再次执行 git diff head
4、执行git add将 a.txt 添加到暂存区,再次执行 git diff head。此时执行git diff head返回的结果和没有add之前的结果是一样的。
5、再次修改a.txt,在a.txt中加入4。执行git diff head,执行git diff,进行对比。因为上面第4步中我再次将a.txt添加到暂存区里去了,所以暂存区里的a.txt是包含3的,再一次说明了
git diff
显示的是本地开发工作中已经修改但未提交至暂存区的文件和已经提交至暂存区文件的修改。git diff head 显示的是已提交到工作树中文件和未提交到工作树中文件的所有修改。
git diff --cached
查看已缓存的改动。工作树中文件head与暂存区内文件的改动。
直接接着上面的步骤执行 git diff --cached
本地a.txt包含1,2,3,4。暂存区中文件包括1,2,3。已经提交的工作树中包括1,2。