1、git diff 命令说明

commit操作之前,我们通常要确定一下自己在什么地方更改了代码,看看有没有误操作代码,这个时候git status命令的显示就比较简单了,仅仅是列出了修改过的文件,如果要查看具体修改了什么地方,就可以使用git diff命令。

比较有用的选项:--stat:显示有多少行发生变化,简洁的展示差异。

2、比较工作区与暂存区中文件的差别

查看工作区与暂存区内容的区别,使用无选项的git diff命令。

git diff file_name:获取指定文件的修改。

(1)首先在工作目录中创建一个hello.html文件,并添加到暂存区。

# 1.查看工作目录中的文件状态
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
nothing to commit, working tree clean # 2.创建hello.html文件
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ echo "hello git" > hello.html # 3.把hello.html文件添加到暂存区
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git add hello.html

(2)向hello.html文件添加一行新的内容,之后查看工作区与暂存区hello.html文件的区别。

# 1.向hello.html文件添加内容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ echo "new one line" >> hello.html # 2.比较工作区与暂存区中hello.html文件的区别
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git diff hello.html
diff --git a/hello.html b/hello.html
index 8d0e412..ee5cc3c 100644
--- a/hello.html
+++ b/hello.html
@@ -1 +1,2 @@
hello git
+new one line

说明:

  • diff --git a/hello.html b/hello.html:表示进行比较的是hello.html文件的a版本(即变动前)和b版本(即变动后)。
  • index 8d0e412..ee5cc3c:表示两个版本的hash索引值,前边表示暂存区文件的索引,后边代表工作区中文件的索引。
  • 100644:表示文件模式,100代表普通文件,644代表文件具有的权限(同Linux文件权限)。
  • --- a/hello.html+++ b/hello.html:表示进行比较的两个文件,---表示变动前的版本,+++表示变动后的版本。
  • @@ -1 +1,2 @@:表示代码变动的位置,用两个@作为起首和结束。

    +1,2说明:分成三个部分:

    +表示变动后文件,1表示第一行,2表示连续2行。(也就是从第一行开始,有连续两行的内容。我个人的理解就是表示文件有几行内容。)
  • 最后一部分为文件变动的具体内容,每一行最前面的标志位:

    -代表第一个文件删除的行,用红色表示。

    +表示第二个文件新增的行,用绿色表示。

    无标志表示该行无变动。

这里在简单说明一下--stat选项的作用,如下:

# `--stat`选项作用:简洁的展示差异
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git diff hello.html --stat
fatal: option '--stat' must come before non-option arguments
# 错误提示:选项“--stat”必须位于非选项参数之前 # 正确写法,只显示了简要的内容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git diff --stat hello.html
hello.html | 1 +
1 file changed, 1 insertion(+)

(3)将修改后的hello.html文件添加到暂存区中,再次来查看该文件。

# 1.将修改后的hello.html文件添加到暂存区中
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git add hello.html # 在执行命令查看hello.html文件
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git diff hello.html

没有任何输出,这就说明此时,工作区中hello.html文件的内容,与暂存区中hello.html文件的内容没有区别。

3、比较暂存区与本地库中文件的差别

查看暂存区与本地库中文件内容的区别,使用带--cached选项的git diff命令。

使用命令:git diff --cached file_name

(1)接上面练习,把hello.html文件提交到本地版本库中。

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git commit -m 'add hello.html file'
[master 6b6b1fc] add hello.html file
1 file changed, 2 insertions(+)
create mode 100644 hello.html

(2)修改hello.html文件,然后添加到暂存区。

# 修改hello.html文件
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ echo "new two two line" >> hello.html # 添加到暂存区
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git add hello.html

(3)比较暂存区和本地版本库中hello.html文件的区别。

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git diff --cached hello.html
diff --git a/hello.html b/hello.html
index ee5cc3c..7c88cdc 100644
--- a/hello.html
+++ b/hello.html
@@ -1,2 +1,3 @@
hello git
new one line
+new two two line

从上面文件中可以看出,暂存区中的hello.html文件比本地版本库中的hello.html文件,多出一行new two two line内容。(解读方式同上。)

4、总结git diff命令常见用法

  1. 比较工作区与暂存区:

    git diff命令,不加参数即默认比较工作区与暂存区。
  2. 比较暂存区与最新本地版本库(本地库中最近一次commit的内容):

    git diff --cached命令或者git diff --staged命令(1.6.1版本以上)。
  3. 比较工作区与最新本地版本库:

    git diff HEAD命令,如果HEAD指向的是master分支,那么HEAD还可以换成master
  4. 比较工作区与指定commit提交的差异:

    git diff commit-id命令。
  5. 比较暂存区与指定commit提交的差异:

    git diff --cached commit-id 命令。
  6. 比较两个commit提交之间的差异:

    git diff [<commit-id>] [<commit-id>]命令。
  7. 使用git diff命令打补丁,这个用法以后会详解,知道有这么回事就行。

提示:以上就不详细说明了,看前面举例两个例子,其他同理。

5、总结

以现在学到的知识点,git diff命令能解决我们两个问题:

  • 查看当前做的哪些更新还没有暂存?

    需要查看细节的时候,使用git diff命令。
  • 查看有哪些更新已经暂存起来,准备好了下次提交?

    需要查看细节的时候,使用git diff --cached命令或者git diff --staged命令。

参考:

『现学现忘』Git基础 — 21、git diff命令的更多相关文章

  1. 『现学现忘』Git基础 — 18、Git对象的总结

    目录 1.Git操作最基本的流程 2.工作目录中文件的状态 3.Git效率说明 提示:前面三篇文章已经分别的对blob对象.tree对象.commit对象进行了详细的说明,这篇文章我们总结一下,Git ...

  2. 『现学现忘』Git基础 — 3、Git介绍

    目录 1.Git的历史 2.Git的特点 3.Git在项目协作开发中所解决的问题 1.Git的历史 Git是目前世界上最先进的分布式版本控制系统,开源.免费. Git 是 Linus (林纳斯)为了帮 ...

  3. 『现学现忘』Git基础 — 4、Git下载与安装

    目录 1.Git下载 2.Git在Windows下的详细安装 3.验证Git是否安装成功 1.Git下载 进入官方地址下载Git客户端:https://git-scm.com/download/win ...

  4. 『现学现忘』Git基础 — 11、配置Git用户签名的方式

    目录 1.配置Git签名 (1)语法 (2)配置系统用户签名 (3)配置全局用户签名 (4)配置本地用户签名 2.查看三个配置文件的用户签名 (1)语法 (2)查看项目/仓库级别的配置文件信息(loc ...

  5. 『现学现忘』Git基础 — 12、Git用户签名(补充)

    目录 1.修改用户签名 2.取消用户签名 3.用户签名的优先级 4.总结本文用到的Git命令 1.修改用户签名 其实很简单,就是重新执行git config命令,换个用户名和邮箱地址就可以了,新配置的 ...

  6. 『现学现忘』Git基础 — 14、Git基础操作的总结与补充

    目录 1.Git本地版本库结构 2.Git常用操作方法 3.补充:添加多个文件到暂存区 4.补充:提交操作未写备注 5.补充:从工作区直接提交到版本库 1.Git本地版本库结构 如下图所示: 工作区( ...

  7. 『现学现忘』Git基础 — 19、在Git中进行忽略文件操作

    目录 1.忽略文件说明 2.忽略文件的原则 3..gitignore忽略规则 4.忽略文件的三种方式 (1)忽略单个仓库中的文件(远程共用) (2)忽略单个仓库中的文件(本地使用) (3)全局忽略 1 ...

  8. 『现学现忘』Git基础 — 23、Git中的撤销操作

    目录 1.撤销操作说明 2.撤销工作区中文件的修改 3.撤销暂存区中文件的修改 4.总结 1.撤销操作说明 我们在使用Git版本管理时,往往需要撤销某些操作.比如说我们想将某个修改后的文件撤销到上一个 ...

  9. 『现学现忘』Git基础 — 24、Git中查看历史版本记录

    目录 1.查看详细的历史版本记录 2.简化显示历史版本记录 3.历史版本记录常用操作 (1)指定查看最近几次提交的内容 (2)以简单图形的方式查看分支版本历史 (3)翻页与退出 4.查看分支相关的版本 ...

随机推荐

  1. Redis 是单进程单线程的?

    Redis 是单进程单线程的,redis 利用队列技术将并发访问变为串行访问,消 除了传统数据库串行控制的开销.

  2. 哪些是重要的 bean 生命周期方法?你能重载它们吗?

    有两个重要的 bean 生命周期方法,第一个是 setup , 它是在容器加载 bean 的时候被调用.第二个方法是 teardown 它是在容器卸载类的时候被调用. The bean 标签有两个重要 ...

  3. 学习saltstack (二)

    saltstack使用教程: 1.安装: 需要epel的yum源,没有的话把下面的复制并新建个文件 /etc/yum.repos.d/epel.repo 粘贴即可: [epel] name=Extra ...

  4. 007.iSCSI服务器CHAP双向认证配置

    一 iSCSI和CHAP介绍 1.1 iSCSI 磁盘 iSCSI后端存储支持多种设备类型,主要有: 文件 单一分区(partition) 磁盘 数组 RAID LVM 本手册建议以裸磁盘vdb作为示 ...

  5. CAN总线系列讲座第六讲——SJA1000的滤波器设置

    CAN总线的滤波器设置就像给总线上的节点设置了一层过滤网,只有符合要求的CAN信息帧才可以通过,其余的一概滤除. 在验收滤波器的帮助下,只有当接收信息中的识别位和验收滤波器预定义的值相等时,CAN 控 ...

  6. python-逆序输出

    输入一行字符串,然后对其进行如下处理. 输入格式: 字符串中的元素以空格或者多个空格分隔. 输出格式: 逆序输出字符串中的所有元素.然后输出原列表.然后逆序输出原列表每个元素,中间以1个空格分隔.注意 ...

  7. 通过uniCloud白捡一个在线图库管理工具,可支持图床外链

    喜欢写文章的技术大佬们,应该都有一个自己的在线图片管理工具吧. 尤其是在写markdown时,为了让我们的文章"图文并茂",显得不那么枯燥,就经常需要在合适的地方插入一些关联性的图 ...

  8. Factorials and Powers of Two

    分析:我们可以看出这道题目的描述并不是很复杂,就是说对于一个给定的整数n,我们能否把他拆成k个powerful的数,也就是说这k个数要么是2的幂次,要么是某个数的阶乘,并且我们要让当前的k越小越好:然 ...

  9. OllyDbg---寄存器

    寄存器 寄存器的概念和作用 寄存器是CPU内部的高速存储单元,访问速度比常规内存快很多. 处理器在执行程序时,需要一个助手,当执行一条指令时,比如将两个内存单元中存放的内容相加,处理器需要先把其中一个 ...

  10. Spring Boot-Profile

    文章目录 前言 一.Profile是什么? 二.使用步骤 1.多Profile文件 2.使用yml方式 3.激活方式 总结 前言 不同的环境解释:比如我们开发人员使用开发环境,项目发布时使用生产环境, ...