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 ...
随机推荐
- Activity的onPause()、onStop()和onDestroy()里要做的事情
onPause(): 当系统调用你的activity中的onPause(),从技术上讲,那意味着你的activity仍然处于部分可见的状态,当时大多数时候,那意味着用户正在离开这个activity并马 ...
- Android中3种全屏方法及3种去掉标题栏的方法
一.去掉标题栏的方法 第一种:入门的时候经常使用的一种方法 复制代码代码如下: requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉标题栏注意这句一 ...
- MySQL 5.7.19 CentOS 7 安装
Linux的版本有很多,因此下载mysql时,需要注意下载对应Linux版本的MySql数据库文件.以下方法也适合centOS 7 的mysql 5.7.* 版本的安装.安装方法我整理为16步. 1: ...
- mysql数据库,创建只读用户
数据库当前只有一个root用户,需要创建一个只读帐户给其他使用,因使用者是使用数据库管理工具在其他主机访问,所以还要开户远程访问权限,操作步骤如下. 1. 使用现有的root用户登录到Mysql. m ...
- spring中InitializingBean接口使用理解(转)
InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法. 测试程序如下: imp ...
- SQL SERVER 查看数据库信息
a.使用sys.database_files查看有关数据库文件的信息 b.使用sys.filegroups查看有关数据库组的信息. c.使用sys.master_files 查看数据库文件的基本信息和 ...
- testbench的设计 文件读取和写入操作 源代码
十大基本功之 testbench 1. 激励的产生 对于 testbench 而言,端口应当和被测试的 module 一一对应.端口分为 input,output 和 inout 类型产生激励信号的时 ...
- 【iOS XMPP】使用XMPPFramewok(四):收发消息
转自:http://www.cnblogs.com/dyingbleed/archive/2013/05/16/3075105.html 收发消息 接收消息 通过实现 - (void)xmppStre ...
- openssl之EVP系列之13---EVP_Open系列函数介绍
openssl之EVP系列之13---EVP_Open系列函数介绍 ---依据openssl doc/crypto/EVP_OpenInit.pod翻译和自己的理解写成 (作者:Dra ...
- 如何从angular2中的url获取查询参数?
问题描述 我使用angular2.0.0-beta.7.当组件在像”/path?query=value1″这样的路径上加载时,它被重定向到”/path”.为什么删除了GET参数?如何保留参数? 路由器 ...