git比较文件差异

阐述

在实际工作中,文件差异的比较是经常会碰到的,今天就来总结一下git diff命令的使用。

使用场景

当我们上线一个分支时,往往会碰到要和master分支做比较的情况,需要确认分支所提交的修改是否属于都自己的,会不会把别人的修改一起提交上去,这个时候就要以master分支为参照,比较自己分支和master分支之间的差异。我们还可能会碰到,为了确认某次的线上Bug,需要对比历史提交的版本和当前版本之间的差异。

如何比较不同分支之间的文件差异

git diff master dev

上面的命令是以master分支为参照,比较dev分支和master分支之间的差异。注意改变分支的比较顺序,结果会不同,默认不加文件名参数,会比较出所有文件的差异。 比较指定文件的差异可以参照如下命令:

git diff master dev – READMD.md

实际Git在设计上,用了一个指针来指向当前分支所在commit对象,master分支实际上为一个指针,在不分离头指针的情况下,它指向的是最新一次提交的commit对象,dev分支也是。 所以把命令git diff master dev替换成git diff fde17e9 4700e4a也是一样的效果,使用git log命令就能查看当前master分支和dev分支所指向的commit id。 commit id是经过SHA1加密算法计算出来的40位十六进制HASH值,Git是分布式的,它不像SVN等集中式控制版本,是用一个自增长ID来标志每次的提交。 一般我们取SHA1计算出来的前7位就能标识出来某次的提交,比较不同版本之间的差异,也用的commit id来指代版本。

如何比较工作区和版本库之间的文件差异

Git中用一个叫HEAD的指针指向当前分支的最新一次提交,我们可以用以下命令来比较工作区和版本库之间的文件差异

比较全部文件: git diff HEAD

比较单个文件: git diff HEAD – READMD.md

比较单个文件或者某几个文件,需要加上–,以下就不再举例单个文件的差异比较了,大家记住这个规则就好。

如何比较工作区和暂存区之间的文件差异

使用默认的git diff,不加任何参数,默认比较的是工作区和暂存区之间的文件差异。

如何比较暂存区和版本库之间的文件差异

使用git diff –cached或者git diff –staged来比较暂存区和版本库之间的文件差异,cached和staged都有表示缓存的意思。

最后,用一张图来总结文章的内容,希望对大家有帮助。