git diff

我们在bad第三行加了modify0,新增了4 5 6 行

gitlab 文件对比 git对比文件差异_git


gitlab 文件对比 git对比文件差异_git_02


虽然我们只做了在ffff后面增加的操作和新增了三行 但是显示红色部分 ffff 行被删掉了 但是又新增了 ffff modify0 是因为git是以行为单位进行文件的管理,这样的操作和直接增加行效果一样接下来我们把bad恢复到只有三行wwww jjjj ffff

然后做删除第一行全部 再删除j行但是不删除完发现

删除整行直接删除该行, 删除部分行也是先删除本行再增加该行

gitlab 文件对比 git对比文件差异_gitlab 文件对比_03


接着git status 发现有 modified changes unstaged 执行add 后再diff发现

gitlab 文件对比 git对比文件差异_git_04

若diff想和版本库里面的某一个历史版本进行比较 添加HEAD参数即可

git diff 没有任何输出 即没有区别这是因为 diff 不添加任何参数直接用是和暂存区进行比较我们在执行diff之前执行了add操作,add使得暂存区同步了,因此add之后diff没有区别但是如果在add之前diff发现还是有变化的(add之前diff 不管是和暂存区还是版本库比较都是有区别的

接下来我们恢复bad到初态来验证这一点 如下图

gitlab 文件对比 git对比文件差异_gitlab 文件对比_05


接下来我们验证add之后diff 发现无变化,但是添加HEAD参数和本地库版本比较发现还是有区别的 是因为本地库还没有同步,即本次操作还没有commit提交到本地库 执行git commit后再diff 暂存区和本地库(添加HEAD参数## 标题)都没变化

gitlab 文件对比 git对比文件差异_git_06

总结

git diff [ file ]工作区文件和暂存区比较

git diff 本地库中历史版本 [ file ] 工作区文件和本地库历史记录作比较

git diff 不加文件名比较当前工作区的所有文件

本质还是理解git工作机制 工作区 暂存区和本地库之间的联系

我们在上述举例中都是用的HEAD ,并不是说只能和HEAD版本比较 HEAD 可以换成任意版本号如 HEAD^ / 9a1d70f

gitlab 文件对比 git对比文件差异_本地库_07


gitlab 文件对比 git对比文件差异_gitlab 文件对比_08