## 差异对比的各种情况
```
git diff <filename>
```
![](https://img.kancloud.cn/64/13/641383f5b60689a8ad007e40cbe835b5_633x176.png)
当工作区有改动(存在unstaged的文件),**暂存区为空**,diff的对比是“**工作区与最后一次commit提交的仓库的共同文件**”
当工作区有改动(存在unstaged的文件),**暂存区不为空**,diff对比的是“**工作区与暂存区的共同文件**”
*****
```
git diff --cached 或git diff --staged
```
> cached 和staged都表示暂存区的意思 所以功能一样
显示**暂存区**(已add但未commit文件)和**最后一次commit**(HEAD)之间的所有不相同文件的增删改
****
```
git diff HEAD:
```
显示工作目录(已track但未add文件)和暂存区(已add但未commit文件)与最后一次commit之间的的所有不相同文件的增删改。
```
git diff HEAD~X或git diff HEAD^^^…(后面有X个^符号,X为正整数):
```
可以查看最近一次提交的版本与往过去时间线前数X个的版本之间的差异。
****
> 什么是unstaged状态:
就是文件发生了修改,但是没有加到暂存区。