理解git diff的前提,首先要理解git中工作区,暂存区,本地版本库的概念,如果头脑中有这些概念,接着往下读。

git diff test.c 用来查看工作区和暂存区中test.c文件的区别。

git diff HEAD -- test.c 用来查看工作区和本地版本库中test.c文件的区别。

eg:

a. 在工作区中修改文件cfm_test.c,git diff cfm_test.c 和 git diff HEAD --  cfm_test.c 分别输出如下:

  1. [3me]$ git diff cfm_test.c
  2. @@ -45,7 +45,11 @@ cfm_test_init ()
  3. tst->tst_data = XCALLOC (MTYPE_ITUT_CFM_MSG, CFM_TST_PDU_MAX_LENGTH);
  4. if (!tst->tst_data)
  5. {
  6. - XFREE (MTYPE_ITUT_CFM_MSG, tst->tst_data);
  7. +#if defined(CONFIG_DS_COVERITY)
  8. + XFREE( MTYPE_ITUT_CFM_TST, tst);
  9. +#else
  10. + XFREE (MTYPE_ITUT_CFM_MSG, tst->tst_data);
  11. +#endif
  12. return NULL;
  13. }
  14.  
  15. [3me]$ git diff HEAD -- cfm_test.c
  16. @@ -45,7 +45,11 @@ cfm_test_init ()
  17. tst->tst_data = XCALLOC (MTYPE_ITUT_CFM_MSG, CFM_TST_PDU_MAX_LENGTH);
  18. if (!tst->tst_data)
  19. {
  20. - XFREE (MTYPE_ITUT_CFM_MSG, tst->tst_data);
  21. +#if defined(CONFIG_DS_COVERITY)
  22. + XFREE( MTYPE_ITUT_CFM_TST, tst);
  23. +#else
  24. + XFREE (MTYPE_ITUT_CFM_MSG, tst->tst_data);
  25. +#endif
  26. return NULL;
  27. }

b. 执行git add cfm_test.c,将文件提交到暂存区,输出如下:

  1. [3me]$ git add cfm_test.c
  2. [3me]$ git diff cfm_test.c
  3. [3me]$ git diff HEAD -- cfm_test.c
  4. @@ -, +, @@ cfm_test_init ()
  5. tst->tst_data = XCALLOC (MTYPE_ITUT_CFM_MSG, CFM_TST_PDU_MAX_LENGTH);
  6. if (!tst->tst_data)
  7. {
  8. - XFREE (MTYPE_ITUT_CFM_MSG, tst->tst_data);
  9. +#if defined(CONFIG_DS_COVERITY)
  10. + XFREE( MTYPE_ITUT_CFM_TST, tst);
  11. +#else
  12. + XFREE (MTYPE_ITUT_CFM_MSG, tst->tst_data);
  13. +#endif
  14. return NULL;
  15. }

分析:由于已经将文件提交到暂存区,所以工作区和暂存区中文件无区别,所以 git diff cfm_test.c 无输出内容;由于未提交到本地版本库,工作区和本地版本库文件有区别,所以 git diff HEAD -- cfm_test.c 输出diff内容。

c. 接着执行git commit 将文件提交到本地版本库,输出如下:

  1. [3me]$ git commit -m "for source code coverity check."
  2. [master 444ebb0f84] for source code coverity check.
  3. file changed, insertions(+), deletion(-)
  4. [3me]$ git diff cfm_test.c
  5. error: cannot run most: No such file or directory
  6. [3me]$ git diff HEAD -- cfm_test.c
  7. error: cannot run most: No such file or directory

分析:执行 commit 将文件提交到本地版本库, 因此工作区,暂存区,本地库三者之间的内容是一致的,因此git diff 和git diff HEAD 输出均无内容。

git diff 命令用法的更多相关文章

  1. 『现学现忘』Git基础 — 21、git diff命令

    目录 1.git diff 命令说明 2.比较工作区与暂存区中文件的差别 3.比较暂存区与本地库中文件的差别 4.总结git diff命令常见用法 5.总结 1.git diff 命令说明 在comm ...

  2. diff 命令用法--如何打补丁【原创--学习笔记】

    diff 命令用法 1.”-u”:表示在比较结果中输出上下文中一些相同的行,这有利于人工定位 2.“-r“:表示递归比较各个子目录下的文件 3.“-N“:将不存在的文件当作空文件 4.“-w“:忽略对 ...

  3. emacs 中使用git diff命令行

    在shell中执行git diff命令,常常会看到例如以下警告信息: terminal is not fully functional 事实上非常easy,配置一下就可以. git config -- ...

  4. git diff的用法

    在git提交环节,存在三大部分:working tree(工作区), index file(暂存区:stage), commit(分支:master) working tree:就是你所工作在的目录, ...

  5. linux中diff命令用法

    diff 命 令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版 本的diff还支持二进制文件.diff程 ...

  6. Git:git diff 命令详解

    工作目录 vs 暂存区 $ git diff <filename> 意义:查看文件在工作目录与暂存区的差别.如果还没 add 进暂存区,则查看文件自身修改前后的差别.也可查看和另一分支的区 ...

  7. git diff命令详解

    1 如下命令: [devel@localhost pontus]$ git diff webserver/web_pontus/app_api/v0/urls.py# 显示如下: diff --git ...

  8. Linux下diff命令用法详解

    大家好,我是良许. 我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点.在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也 ...

  9. Git diff 常见用法

      Git diff 用于比较两次修改的差异 1.1 比较工作区与暂存区 git diff  比较的是单个仓库的工作区与暂存区的差别,repo diff是对git diff的封装,用来分别显示各个项目 ...

随机推荐

  1. 计算机网络(四),TCP三次握手

    目录 1.三次握手详情 2.为什么需要三次握手才能建立连接 3.首次握手的隐患---SYN超时的问题 4.建立连接之后,Client出现故障 四.TCP三次握手 1.三次握手详情 (1)一开始,客户端 ...

  2. CF 672C 两个人捡瓶子 最短路与次短路思想

    C. Recycling Bottles time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  3. sh_05_列表遍历

    sh_05_列表遍历 name_list = ["张三", "李四", "王五", "王小二"] # 使用迭代遍历列表 ...

  4. TensorFlow使用记录 (三): Learning Rate Scheduling

    file: tensorflow/python/training/learning_rate_decay.py 参考:tensorflow中常用学习率更新策略 神经网络中通过超参数 learning ...

  5. python学习之路(15)

    map/reduce Python内建了map()和reduce()函数. 如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on ...

  6. springboot 集成 druid mybatis-plus

    通过这篇配置成功: https://www.cnblogs.com/shine-rainbow/p/9618100.html 不过 mybatis 3.4.6 一直maven下载失败,于是直接在官方那 ...

  7. linux设置MySQL开机自动启动

    step1: 通过chkconfig --list命令查看mysqld是否在列表中: step2: 如果列表中没有mysqld这个,需要先用这个命令添加:chkconfig --add mysqld ...

  8. 【java多线程】volatile 关键字

    在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...

  9. LaTex&&markdown

    LaTeX在线编辑器:传送门 LaTeX常用公式整理(转载):传送门 Markdown洛谷教程(转载):传送门 Markdown基本语法(转载):传送门 Markdown数学符号和语法(转载):传送门 ...

  10. sql总结-----基本查询

    创建一个测试表,插入一些测试数据: Create Table Cstable (Id Int,Age Int,Name Varchar2(8),Address Varchar2(20)); Inser ...