github常用命令(五)比较文件差异git diff和暂存区还是本地库比较 & 多文件比较
git diff
我们在bad第三行加了modify0,新增了4 5 6 行
虽然我们只做了在ffff后面增加的操作和新增了三行 但是显示红色部分 ffff 行被删掉了 但是又新增了 ffff modify0 是因为git是以行为单位进行文件的管理,这样的操作和直接增加行效果一样
接下来我们把bad恢复到只有三行wwww jjjj ffff
然后做删除第一行全部 再删除j行但是不删除完发现
删除整行直接删除该行, 删除部分行也是先删除本行再增加该行
接着git status 发现有 modified changes unstaged 执行add 后再diff发现
若diff想和版本库里面的某一个历史版本进行比较 添加HEAD参数即可
git diff 没有任何输出 即没有区别这是因为 diff 不添加任何参数直接用是和暂存区进行比较我们在执行diff之前执行了add操作,add使得暂存区同步了,因此add之后diff没有区别但是如果在add之前diff发现还是有变化的(add之前diff 不管是和暂存区还是版本库比较都是有区别的)
接下来我们恢复bad到初态来验证这一点 如下图
接下来我们验证add之后diff 发现无变化,但是添加HEAD参数和本地库版本比较发现还是有区别的 是因为本地库还没有同步,即本次操作还没有commit提交到本地库 执行git commit后再diff 暂存区和本地库(添加HEAD参数## 标题)都没变化
总结
git diff [ file ]工作区文件和暂存区比较
git diff 本地库中历史版本 [ file ] 工作区文件和本地库历史记录作比较
git diff 不加文件名比较当前工作区的所有文件
本质还是理解git工作机制 工作区 暂存区和本地库之间的联系
我们在上述举例中都是用的HEAD ,并不是说只能和HEAD版本比较 HEAD 可以换成任意版本号如 HEAD^ / 9a1d70f