zoukankan      html  css  js  c++  java
  • Git 之 git diff

    首先看一下 git diff 相关的命令

    # 显示暂存区和工作区的代码差异
    $ git diff
    
    # 显示暂存区和上一个commit的差异
    $ git diff --cached [file]
    
    # 显示工作区与当前分支最新commit之间的差异
    $ git diff HEAD
    
    # 显示两次提交之间的差异
    $ git diff [first-branch]...[second-branch]
    

    在学习之前可以去下面的博客中先学习
    引用自读懂diff
    git diff 采用的是unix中合并格式的diff

    示例文件

    为了便于讲解,先新建两个示例文件。

    第一个文件叫做f1,内容是每行一个a,一共7行。

      a
      a
      a
      a
      a
      a
      a
    

    第二个文件叫做f2,修改f1而成,第4行变成b,其他不变。

      a
      a
      a
      b
      a
      a
      a
    

    合并格式的diff

    如果两个文件相似度很高,那么上下文格式的diff,将显示大量重复的内容,很浪费空间。1990年,GNU diff率先推出了"合并格式"的diff,将f1和f2的上下文合并在一起显示。
    它的使用方法是加入u参数(代表unified)。

    diff -u f1 f2
    

    显示结果如下:

        --- f1  2012-08-29 16:45:41.000000000 +0800
        +++ f2  2012-08-29 16:45:51.000000000 +0800
      @@ -1,7 +1,7 @@
       a
       a
       a
      -a
      +b
       a
       a
       a
    

    第一部分:是文件的基本信息

    --- f1 2012-08-29 16:45:41.000000000 +0800
    +++ f2 2012-08-29 16:45:51.000000000 +0800
    

    "---"表示变动前的文件,"+++"表示变动后的文件。

    第二部分,变动的位置用两个@作为起首和结束

    @@ -1,7 +1,7 @@
    

    前面的"-1,7"分成三个部分:
    减号表示第一个文件(即f1),"1"表示第1行,"7"表示连续7行。合在一起,就表示下面是第一个文件从第1行开始的连续7行。
    同样的,"+1,7"表示变动后,成为第二个文件从第1行开始的连续7行。

    第三部分是变动的具体内容

       a
       a
       a
      -a
      +b
       a
       a
       a
    

    除了有变动的那些行以外,也是上下文各显示3行。它将两个文件的上下文,合并显示在一起,所以叫做"合并格式"。每一行最前面的标志位,空表示无变动,减号表示第一个文件删除的行,加号表示第二个文件新增的行

    git diff

    版本管理系统git,使用的是合并格式diff的变体

    git diff
    

    显示结果如下:

      diff --git a/f1 b/f1
      index 6f8a38c..449b072 100644
      --- a/f1
      +++ b/f1
      @@ -1,7 +1,7 @@
       a
       a
       a
      -a
      +b
       a
       a
       a
    
    

    第一行表示结果为git格式的diff

    diff --git a/f1 b/f1
    

    进行比较的是,a版本的f1(即变动前)和b版本的f1(即变动后)。

    第二行表示两个版本的git哈希值(index区域的6f8a38c对象,与工作目录区域的449b072对象进行比较),最后的六位数字是对象的模式(普通文件,644权限)。

    index 6f8a38c..449b072 100644
    

    第三行第四行表示进行比较的两个文件

      --- a/f1
      +++ b/f1
    

    "---"表示变动前的版本,"+++"表示变动后的版本。
    后面的行都与官方[上面我们说过]的合并格式diff相同

      @@ -1,7 +1,7 @@
       a
       a
       a
      -a
      +b
       a
       a
       a
    
  • 相关阅读:
    执行.class文件
    Ant能干什么,编译?打包!
    C的随想
    微服务
    2018年宝鸡市高考复课报告会材料
    用图像解不等式
    高频易错题目01
    2018年宝鸡市二检数学题目解答
    点差法
    和事件的概率求法
  • 原文地址:https://www.cnblogs.com/a438842265/p/12923324.html
Copyright © 2011-2022 走看看