赞
踩
文章中的文字可能存在语法错误以及标点错误,请谅解;
如果在文章中发现代码错误或其它问题请告知,感谢!
演示运行环境:Windows 10 家庭中文版
Git版本:git version 2.23.0.windows.1
git diff命令可以用来比较一个项目中任意的两个版本之间的差异,例如对a、b两个文件进行比较,输出结果除了会显示出两个文件的区别之外,而且还会显示各自区别所在位置的上下几行。如果在我们使用了git管理自己项目时,一旦遇到了忘记对某个文件哪个地方进行了修改或者想要比较新旧版本之间的改动时,这时候就可以使用git diff帮助自己查找具体修改了哪些内容。
git初始化(git init
)后,新建一个readme.txt文件并提交到暂存区(git add readme.txt
),提交内容为:
现在把第1行中的“distributed”去掉并在第4行加上“OK”保存:
然后在git bash中输入git diff
进行比较:
现在对输出进行解释:
除去“warning”灰色的两行,第一行 diff --git a/readme.txt b/readme.txt
表示对比暂存区和工作区之间的文件;
第二行index b9be3a7..cc0f028 100644
,其中index后面两个字符串表示两个文件的hash值,最后一个数字100644表示属性和权限,100表示普通文件,644代表一个权限,表示rw-r--r--
,即文件所有者可读可写,同组用户和其它用户只可读;
第三行第四行--- a/readme.txt
+++ b/readme.txt
中---
代表源文件,+++
代表目标文件,这里指的是暂存区和工作区文件;
第五行@@ -1,3 +1,4 @@
分为两个部分,一部分是-1,3
,-
表示源文件,1,3
表示从源文件文件的第1行开始的3行,另一部分是+1,4
,+
表示目标文件,1,4
表示从目标文件文件的第1行开始的4行;源文件和目标文件之间的差异按照差异小结进行组织,每个差异小结第一行都是定位语句,由@@
开头与结尾;
余下的行表示具体的差异信息,以-
开头的行表示只出现在源文件中的行,以+
开头的行表示只出现在目标文件中的行,以空格开头的行表示源文件和目标文件都出现的行。
注意git diff出现“waring”那一行提示,若在使用git时遇到,解决方法可参考这篇文档:
https://www.cnblogs.com/guohaoblog/p/9123949.html
我们都知道git工作区域分为工作区(working directory)、暂存区(Stage 或 Index)、git本地版本库(repository)。不同的区域和版本库之间的文件比较所用到的git diff 用法也不相同,下面对git diff比较进行一些小结,例子可能有些绕,不过仔细看一定会看明白,该小节之后有git diff 用法图示方便理解:
1.比较 工作区 和 暂存区 内容差异:
git diff
0x02小节的举例就是一个使用git diff
将工作区和暂存区进行对比的例子,可以参照该例进行理解。
2.比较 工作区 和 最新本地版本库(本地库中最近一次commit)内容差异:
git diff HEAD
同样以0x02小节的例子为基础,现在将暂存区里的readme.txt(不带“OK”那行的readme.txt) 提交到版本库:git commit -m "第一次提交readme"
,然后使用该指令,输出结果:
这里就可以清楚的显示当前工作区中的readme.txt(带“OK”那行的readme.txt)和仓库中readme.txt(不带“OK”那行的readme.txt)中的差异。
3.比较 暂存区 与 最新本地版本库(本地库中最近一次commit)内容差异:
git diff --cached
现在将0x03的2中的工作区readme.txt(即带“OK”那行的readme.txt)提交到暂存区git add readme.txt
,然后使用该指令,输出结果:
这里就可以清楚的显示当前已经提交到暂存区中的最新的readme.txt(带“OK”那行的readme.txt)和版本库中readme.txt(不带“OK”那行的readme.txt)中的差异。
4.比较 工作区 和 指定版本 内容差异:
git diff commit-id(版本ID号)
现在将0x03的2中暂存区的readme.txt提交到本地(git commit -m "with OK"
),然后使用git log
查看提交的历史版本:
现在本地有两个历史版本,如果我们想要对比现在工作区中的readme.txt和第一次提交的版本中的readme.txt可以使用该指令:
git diff 89c85
(89c85为第一次提交的版本ID前几位)
输出结果:
注意版本号ID可以不用写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,所以无法确定是哪一个版本。
5.比较 暂存区 和 指定版本 之间的内容差异:
git diff --cached commit-id(版本ID号)
现在比较暂存区和指定版本之间的差异,比如想对比一下第一次提交的版本之间的内容差异,使用该指令:
git diff --cached 89c85
(89c85为第一次提交的版本ID前几位)
输入结果如下:
6.比较两个版本之间的内容差异:
git diff commit-id1(版本ID号1) commit-id2(版本ID号2)
现在想比较两个已提交的版本之间的差异,比如0x03的4提交的两个版本,可以使用该指令:
git diff 89c85 a3542
(89c85为第一次提交的版本ID前几位,a3542为最近一次的提交版本ID前几位)
输出结果:
为了方便对git diff使用的理解,文末的参考文档3里面有关于git diff用法的图示,现在我修改一下再贴出来,这样就可以直观了解git diff在什么情况下加什么参数进行正确的差异比较:
以上。
参考文档:
1.https://www.jianshu.com/p/c0a4fdff905f
2.https://www.cnblogs.com/qianqiannian/p/6010219.html
3.https://www.bilibili.com/video/av8261658/?p=5
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。