Git进阶--13、Git比对各区差异-git diff
1、git diff 命令说明
在commit
操作之前,我们通常要确定一下自己在什么地方更改了代码,看看有没有误操作代码,这个时候git status
命令的显示就比较简单了,仅仅是列出了修改过的文件,如果要查看具体修改了什么地方,就可以使用git diff
命令。
比较有用的选项:--stat
:显示有多少行发生变化,简洁的展示差异。
2、比较工作区与暂存区中文件的差别
查看工作区与暂存区内容的区别,使用无选项的git diff
命令。
git diff file_name
:获取指定文件的修改。
(1)首先在工作目录中创建一个hello.html
文件,并添加到暂存区。
1 |
|
(2)向hello.html
文件添加一行新的内容,之后查看工作区与暂存区hello.html
文件的区别。
1 |
|
说明:
diff --git a/hello.html b/hello.html
:表示进行比较的是hello.html
文件的a
版本(即变动前)和b
版本(即变动后)。index 2435b37..bf8e610 100644
:表示两个版本的hash
索引值,前边表示暂存区文件的索引,后边代表工作区中文件的索引。100644
:表示文件模式,100
代表普通文件,644
代表文件具有的权限(同Linux文件权限)。--- a/hello.html
和+++ b/hello.html
:表示进行比较的两个文件,---
表示变动前的版本,+++
表示变动后的版本。@@ -1 +1,2 @@
:表示代码变动的位置,用两个@
作为起首和结束。
以+1,2
说明:分成三个部分:+
表示变动后文件,1表示第一行,2表示连续2行。(也就是从第一行开始,有连续两行的内容。我个人的理解就是表示文件有几行内容。)- 最后一部分为文件变动的具体内容,每一行最前面的标志位:
-
代表第一个文件删除的行,用红色表示。+
表示第二个文件新增的行,用绿色表示。
无标志表示该行无变动。
这里在简单说明一下--stat
选项的作用,如下:
1 |
|
(3)将修改后的hello.html
文件添加到暂存区中,再次来查看该文件。
1 |
|
没有任何输出,这就说明此时,工作区中hello.html
文件的内容,与暂存区中hello.html
文件的内容没有区别。
3、比较暂存区与本地库中文件的差别
查看暂存区与本地库中文件内容的区别,使用带--cached
选项的git diff
命令。
使用命令:git diff --cached file_name
提交到版本库之前
1 |
|
说明本地版本库当前为空
(1)接上面练习,把hello.html
文件提交到本地版本库中。
1 |
|
此时为空,表示本地版本库已经与暂存区一致
(2)修改hello.html
文件,然后添加到暂存区。
1 |
|
(3)比较暂存区和本地版本库中hello.html
文件的区别。
1 |
|
从上面文件中可以看出,暂存区中的hello.html
文件比本地版本库中的hello.html
文件,多出一行hello again more
内容。(解读方式同上。)
4、总结git diff命令常见用法
- 比较工作区与暂存区:
git diff
命令,不加参数即默认比较工作区与暂存区。 - 比较暂存区与最新本地版本库(本地库中最近一次
commit
的内容):git diff --cached
命令或者git diff --staged
命令(1.6.1版本以上)。 - 比较工作区与最新本地版本库:
git diff HEAD
命令,如果HEAD
指向的是master
分支,那么HEAD
还可以换成master
。 - 比较工作区与指定
commit
提交的差异:git diff commit-id
命令。 - 比较暂存区与指定
commit
提交的差异:git diff --cached commit-id
命令。 - 比较两个
commit
提交之间的差异:git diff [<commit-id>] [<commit-id>]
命令。 - 使用
git diff
命令打补丁,这个用法以后会详解,知道有这么回事就行。
提示:以上就不详细说明了,看前面举例两个例子,其他同理。
5、总结
以现在学到的知识点,git diff
命令能解决我们两个问题:
- 查看当前做的哪些更新还没有暂存?
需要查看细节的时候,使用git diff
命令。 - 查看有哪些更新已经暂存起来,准备好了下次提交?
需要查看细节的时候,使用git diff --cached
命令或者git diff --staged
命令。