不同参数下git diff输出并不相同,理解了工作区,暂存区和版本库的关系之后就很容易理解diff了。

工作区、暂存区和版本库的目录树浏览

清除工作区中未被git管理的文件

 git clean -fd

查看暂存区和HEAD中的目录树

 git ls-tree -l HEAD

其中:

  • 参数-l可以显示文件大小
  • 第一个字段时文件的属性(rw-r--r--,644)
  • 第二个字段说明时Git对象库中的一个blob对象(文件)
  • 第三个字段时该文件在对象库中对应的ID——40位的SHA1哈希值
  • 第四个字段时文件大小
  • 第五个字段是文件名

要显示暂存区的目录树,可以使用git ls-files命令

 git ls-files -s

与git ls-tree不同的是第三个字段不是文件大小而是暂存区编号

如果想针对暂存区的目录树使用git ls-tree命令,

 git wirte-tree                // 首先将暂存区的目录树写入git对象库
git ls-tree -l 9431f4a // 对该目录树执行
  • 40位的SHA1哈希值的ID可以用指代文件内容(blob)、目录树(tree)和提交。
  • 命令git write-tree的输出就是写入Git对象库的TreeID,这个ID作为下一条命令的输入。
  • git中的ID只要不冲突可以只使用前几位。
  • git ls-tree可以用-r递归显示树结构,而不是最终的文件。

思考:

git ls-tree -l 后面还要接一个参数一会儿是提交,一会儿是HEAD。所以其实提交和HEAD其实本质上是一回事?

还有,之前做一个需求的时候需要进行对象的对比,发现那些内容改变了,然后讨论的时候提到的git是增量保存的,是这样的么?

这里是不是说每个提交其实都有对应目录树,不是单独为每个提交保存一个目录树,而是增量保存的。

git diff的魔法

 git diff                               // 工作区和暂存区比较
git diff HEAD/master // 工作区和版本库的比较
git diff --cached/--staged /HEAD // 暂存区和版本的比较

git学习(五):git diff魔法的更多相关文章

  1. git学习——<五>git分支

    git学习——<一>git安装 git学习——<二>git配置文件 git学习——<三>git操作 git学习——<四>git版本管理 一.提出问题 今 ...

  2. git学习(五) git diff操作

    git diff操作 git diff用于比较差异: git diff 不加任何参数 用于比较当前工作区跟暂存区的差异 git diff --cached 或者--staged 对比暂存区(git a ...

  3. 【git学习五】git基础之git分支

    1.背景                最早用github的时候,我傻傻的问舍友大神,git里面的branch是干什么的,他用了非常直白的解释,我至今还记得."branch就是你能够自己建立 ...

  4. Git 学习之Git 基础(二)

    Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置: ...

  5. Git学习记录--git仓库

    Git是一款强大的版本控制工具,与svn相比git的分布式提交,本地仓库等在使用时确实比较方便.当然两者之间各有优劣,我在这里不多做比较.由于之前少有接触git,只是零星大致地了解一点,所以找时间系统 ...

  6. git 学习(1) ----- git 本地仓库操作

    最近在项目中使用git了,在实战中才知道,以前学习的git 知识只是皮毛,需要重新系统的学一下,读了一本叫  Learn Git in a Month of Lunches 的书籍,这本书通俗易懂,使 ...

  7. Git 学习之git 分支(三)

    Git 分支 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的 ...

  8. Git 学习之git 起步(一)

    起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...

  9. Git 学习之 Git Basics

    最近在用git,但git学习曲线实在是有点高. 好在找到一个文档 https://www.atlassian.com/git/tutorial/,以下就是学习笔记吧! git init git ini ...

随机推荐

  1. 【转】对 Parser 的误解

    一直很了解人们对于parser的误解,可是一直都提不起兴趣来阐述对它的观点.然而我觉得是有必要解释一下这个问题的时候了.我感觉得到大部分人对于parser的误解之深,再不澄清一下,恐怕这些谬误就要写进 ...

  2. MFC带标题栏的窗口和不带标题栏的窗口最大化

    原文链接: http://blog.csdn.net/smartgps2008/article/details/7741223 不带标题栏的窗口最大化: 第一种情况:覆盖任务栏 ShowWindow( ...

  3. [转]如何在Windows 10中更改文件夹背景颜色

    ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...

  4. [转]Java的文件读写操作

    file(内存)----输入流---->[程序]----输出流---->file(内存) 当我们读写文本文件的时候,采用Reader是非常方便的,比如FileReader,InputStr ...

  5. C#基础课程之二变量常量及流程控制

    课堂练习:.一个四位整数 输出它的千位,百位,十位,个位 数字. ; ; % ; % ; ; Console.WriteLine("千位数" + b+" 百位数" ...

  6. iphone5 jail break

    dfu恢复恢复备份越狱afc2add删除2个文件,如果只有1个也没问题/var/mobile/Library/Caches/com.apple.mobile.installation.plist/va ...

  7. Jacobi并行拆解

    作者:桂. 时间:2018-04-23  21:12:02 链接:http://www.cnblogs.com/xingshansi/p/8921815.html 前言 本文主要是复数矩阵分解的拆解思 ...

  8. 【Android】2.0 第2章 初识Android App

    分类:C#.Android.VS2015:  创建日期:2016-02-04 一.认识Android操作系统 Android最早由安迪•罗宾(Andy Rubin)创办,2007年被Google公司收 ...

  9. 基于ASP.NET MVC的ABP框架入门学习教程

    为什么使用ABP 我们近几年陆续开发了一些Web应用和桌面应用,需求或简单或复杂,实现或优雅或丑陋.一个基本的事实是:我们只是积累了一些经验或提高了对,NET的熟悉程度. 随着软件开发经验的不断增加, ...

  10. OpenVSwitch 硬件加速浅谈

    https://zhuanlan.zhihu.com/p/57870521 本文首发SDNLAB. 现代的虚拟化技术使得开发和部署高级网络服务变得更加简单方便.基于虚拟化的网络服务,具有多样性,低成本 ...