一、git diff命令使用时涉及的概念
- workspace:是本地项目的工作目录,属于本地代码发生更新但尚未执行 git add 命令时的状态,working tree的状态也随之更新
- index:是索引文件,它是连接working tree和commit的桥梁,每当我们使用git add命令来登记后,index file的内容就会改变,此时index file就和working tree同步了
- local repository:是本地仓库,当我们使用git commit命令提交最新代码时,代码才真正进入git仓库。git commit -m “xxx” 就是将 index 里的内容提交到本地仓库中
- remote repository:是远程仓库,当我们使用git push命令时就会将本地仓库的代码上传至远程仓库,完成整个代码的上传工作
二、常见的git diff命令使用方法
git diff命令后通常需要跟两个参数,参数1是要比较的旧代码,参数2是要比较的新代码。如果只写一个参数,表示默认跟 workspace 中的代码作比较。git diff 显示的结果为 第二个参数所指的代码在第一个参数所指代码基础上的修改
2.1 git diff:查看 workspace 与 index 的差别
2.2 git diff --cached:查看 index 与 local repositorty 的差别
2.3 git diff HEAD:查看 workspace 和 local repository 的差别
HEAD 指向的是 local repository 中的代码最新提交版本
git diff HEAD^ 是比较 workspace 与最新commit的前一次commit的差异,与git diff HEAD的是不同的 git diff HEAD~2 是比较 workspace 与上2次commit的差异,相当于 git diff HEAD~2 HEAD~0,注意两个HEAD的位置,diff显示的结果表示 参数2(HEAD~0) 相对于参数1(HEAD~2)的修改
知识点:^与~之间的区别
当存在多个分支时,^可以用来选择分支;
HEAD~i永远只选择第i级父节点的第一个分支;
HEAD~i^2选择第i级父节点的第二个分支;
以此类推;
HEAD^=HEAD^1=HEAD~1;
如果没有分支,只有一条主线,则HEAD^^^=HEAD^1^1^1=HEAD~3,
如果该级节点有第二个分支,则表示为:HEAD^^^2 = HEAD~2^2
2.4 git diff hash值 与 git diff hash值1 hash值2
有些时候,我们可能需要将当前代码和历史的某一个版本进行比较,这个时候可以先通过 git log 命令获取到所有的历史提交记录
|