git log -l -pretty=raw     // 查看日志 -l是干啥的
git log -pretty=raw //
git cat-file -t 哈希值 // 查看id的类型

不知道为啥这里我不一样:即使用git log -l --pretty=raw也只是出现commit的,但是git cat-file -p 哈希值则会出现tree和parent。

 root@tuhooo:~/workspace/demo # git log
commit ac31089960196a531c277dc516be678c0aa76489 (HEAD -> master)
Author: tuhooo <tuhooo@.com>
Date: Thu Jun :: + empyt commit? commit 12dc6c72e41e6457e262f6f1be5ec5dd5dcb6b58
Author: tuhooo <tuhooo@.com>
Date: Thu Jun :: + initialized.
root@tuhooo:~/workspace/demo # git cat-file -p ac31
tree 190d840dd3d8fa319bdec6b8112b0957be7ee769
parent 12dc6c72e41e6457e262f6f1be5ec5dd5dcb6b58
author tuhooo <tuhooo@.com> +
committer tuhooo <tuhooo@.com> + empyt commit?

查看tree对象的信息:

 root@tuhooo:~/workspace/demo # git cat-file -p 190d
blob 18832d35117ef2f013c4009f5b2128dfaeff354f welcome.txt

这里blob对象保存着文件"welcome.txt"的内容。

 root@tuhooo:~/workspace/demo # git cat-file -t 18832d35117ef2f013c4009f5b2128dfaeff354f
blob
root@tuhooo:~/workspace/demo # git cat-file -p 18832d35117ef2f013c4009f5b2128dfaeff354f
Hello.

这些对象都是存放在git库中的objects目录下(id的前两位作为目录名,后38位作为文件名)。

在commit对象之间的相互关联,可以很容易识别出一条跟踪链。最后一个commit没有parent属性,所以跟踪链到此终结,此即为提交的起点。

 git log --pretty=raw --graph ac31
git status -s -b // 查看工作区和暂存区的改动 -s 精简信息 -b 显示当前分支
 git branch     // 查看当前分支, 前面标有*号的是当前分支
// 下面三个命令的输出是一样的
git log -l HEAD
git log -l master
git log -l refs/heads/master

也就是在当前的版本库中,HEAD、master和refs/heads/master具有相同的指向。接下来一步一步从HEAD到master再到commit。得出的结论是master指向的是一个提交ID(最新提交)。即用一个文件指向这个链条的最新提交。

find .git -name HEAD -o -name master

在.git/logs目录下的文件以后再讨论,现在看.git/HEAD和.git/refs/heads/master上。

cat .git/HEAD

cat .git/refs/heads/master

git cat-file -t e69606   // 查看该提交

查看该提交的内容

用一个文件指向最新的提交,就是.git/refs/heads/master了。

 git rev-parse               // 显示引用对应的提交
git rev-parse master
git rev-parse refs/heads/master
git rev-parse HEAD

git学习(七):git 对象库的更多相关文章

  1. git学习(七) git的标签

    git的标签操作 git标签操作 git tag 不加任何参数 表示显示标签(按字母序) 非按时间 git tag 标签名 默认是给最近一次提交打上标签 git tag 标签名 commitId 给响 ...

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

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

  3. git学习之创建版本库(三)

    创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以 ...

  4. git学习2:版本库

    创建版本库 版本库,又称仓库,英文名为repository,版本库内的所有文件都可以被Git管理起来,即每个文件的修改.删除,Git都能跟踪. 1,在目录中创建版本库 在目录中有两种创建版本库的方法, ...

  5. git学习之创建版本库

    创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以 ...

  6. git学习01- 下载安装&初始化库&提交

    1.windows下安装git,git官网下载安装包安装 2.本地创建一个目录,在目录下创建1个文本 readme.txt 3.cmd进入到该目录,执行git init,初始化git仓库 4.添加文件 ...

  7. Git 学习之关于版本库

    记得在第一次接触代码的时候,当对一些改动不是很确定的时候,我的做法就是在我的电脑上保留多个文件,分别以不同的名字来保存,以便于以后发现某个地方的带动是错误的好做修改,现在想想真是好笑啊. 慢慢的在工作 ...

  8. git学习3 - 克隆远程库到本地 将本地库上传到git

    如何克隆远程版本库到本地 git clone URL 如何用命令将本地项目上传到git 1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 (注意: cd C:/U ...

  9. mzy git学习,git推送到远程库(八)

    git在同步到远程库 关于git中多个用户切换的事情: 完全使用账户密码策略连接远程库: 之前一直尝试在本地切换多个用户,发现一直不行,很奇怪?后面发现必须要去win10的凭据管理器删除当前git的凭 ...

随机推荐

  1. Access2007 操作或事件已被禁用模式阻止解决办法

    在“消息栏”上,单击“选项”. 在“Microsoft Office 安全选项”对话框中,单击“启用此内容”,然后单击“确定”. 如果没有看到消息栏在“数据库工具”选项卡上的“显示/隐藏”组中,单击“ ...

  2. go test命令參数问题

    go test命令參数问题 在使用go test对go代码进行单元測试的时候,遇到关于命令參数的问题.google了一下,没有找到非常好的说明,其实就是一些细节而已. 问题是这种,在进行单元測试的时候 ...

  3. GDI+绘制渐变色

    例1: void CTextDlg::OnPaint(){Graphics graphics(this->m_hWnd); LinearGradientBrush linGrBrush( Poi ...

  4. Objective-C 如何让非等宽的数字和空格对齐

    在printf中,我们可以通过格式字符串来对文字进行对齐输出,比如: printf("%5d\n%5d", 12, 345); 在使用等宽字体的Console中,我们可以看到数字右 ...

  5. EndNote 输出样式模板(根据国家标准制订)

    EndNote 输出样式模板(根据国家标准制定)   EndNote 相当于一个数据库,将添加/导入的文献存档.需要引用文献的时候就从中选择一个插入到文档中,EndNote 会自动给你编号.在文档末尾 ...

  6. eclipse jdk版本设置

    1 Java Build Path(项目的编写环境配置): 在项目上单击右键,properties -> Java Build Path -> Libraries,选择JRE System ...

  7. ROC 曲线简要解释

    阳性 (P, positive)阴性 (N, Negative)真阳性 (TP, true positive):正确的肯定.又称:命中 (hit)真阴性 (TN, true negative):正确的 ...

  8. redis transactions(事务)

    MULTI MULTI:标记一个事务块的开始. 事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行. 可用版本:>= 1.2.0 时间复杂度: ...

  9. Create rolling monthly, weekly and daily Logstash indices

    在刚刚开始接触ELK的时候我们习惯把每一个index都按照day来切割.但是我们会发现我们的shards 会很多. 其实我们一该把那些小的index按照一周或者一个月来rolling,来减少我们的sh ...

  10. ansible 视频学习

    ansible 视频地址 https://ninghao.net/video/4040