git学习(五):git diff魔法
不同参数下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魔法的更多相关文章
- git学习——<五>git分支
git学习——<一>git安装 git学习——<二>git配置文件 git学习——<三>git操作 git学习——<四>git版本管理 一.提出问题 今 ...
- git学习(五) git diff操作
git diff操作 git diff用于比较差异: git diff 不加任何参数 用于比较当前工作区跟暂存区的差异 git diff --cached 或者--staged 对比暂存区(git a ...
- 【git学习五】git基础之git分支
1.背景 最早用github的时候,我傻傻的问舍友大神,git里面的branch是干什么的,他用了非常直白的解释,我至今还记得."branch就是你能够自己建立 ...
- Git 学习之Git 基础(二)
Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置: ...
- Git学习记录--git仓库
Git是一款强大的版本控制工具,与svn相比git的分布式提交,本地仓库等在使用时确实比较方便.当然两者之间各有优劣,我在这里不多做比较.由于之前少有接触git,只是零星大致地了解一点,所以找时间系统 ...
- git 学习(1) ----- git 本地仓库操作
最近在项目中使用git了,在实战中才知道,以前学习的git 知识只是皮毛,需要重新系统的学一下,读了一本叫 Learn Git in a Month of Lunches 的书籍,这本书通俗易懂,使 ...
- Git 学习之git 分支(三)
Git 分支 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的 ...
- Git 学习之git 起步(一)
起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...
- Git 学习之 Git Basics
最近在用git,但git学习曲线实在是有点高. 好在找到一个文档 https://www.atlassian.com/git/tutorial/,以下就是学习笔记吧! git init git ini ...
随机推荐
- span的赋值与取值
1.<span id="span_id">span的文本</span>的取值. js取<span>的值并不是用document.getEle ...
- mvc 缓存页面 减轻服务器压力
方法: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste ...
- C/C++语言中闭包的探究及比较
这里主要讨论的是C语言的扩展特性block.该特性是Apple为C.C++.Objective-C增加的扩展,让这些语言可以用类Lambda表达式的语法来创建闭包.前段时间,在对CoreData存取进 ...
- 谁说C语言很简单?
前两天,Neo写了一篇<语言的歧义>其使用C语言讨论了一些语言的歧义.大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西. 是的,C语言并不简单,让我们来看看 ...
- 温故而知新 phpstudy 设置 nginx 代理
nginx.conif 找到 server 关键字配置 server { listen ; server_name localhost; #charset koi8-r; #access_log lo ...
- 转 Kafka docker
Kafka 教程 http://haofly.net/kafka/ Posted on 2016-12-23 | In tools | | Views: 224 重要概念 生产者(Produc ...
- 使 Inno Setup 打包出的安装程序以管理员身份运行
找到 Inno Setup 安装目录下的 SetupLdr.e32 文件,用 Resource Hacker 将其中的 Manifest 修改一下: 改为: <requestedExecutio ...
- 如何安全的下载Devcon.exe文件
devcon.exe是windows设备管理器的命令行版本,可以让你在cmd中修改设备,但是微软没有提供单独的下载,只能下载一个2G多的wdk包(windows drive kits)才行.私下使用别 ...
- Eclipse 不能build, pom文件上面有叉叉 解决办法
Error message: [html] view plaincopy execution not covered by lifecycle configuration: org.apache. ...
- Windows 以管理员运行而不提示
组策略中设置一下:“计算机配置”-“Windows 配置”-“安全设置”-“本地策略”-“安全选项”下:修改“用户帐户控制: 在管理审批模式下管理员的提升提示行为”选项为“提示凭据”就会再弹出提示框了 ...