Git查看版本演变历史和.git目录结构

1.使用命令行的方式查看版本演变的历史
git log 默认
git log --all 查看所有分支的历史
git log --all --graph查看图形化的版本演变历史
git log --oneline查看当行的简洁历史
git log --oneline -n4查看最近的四条简洁历史
git log --oneline -n4 --graph 查看所有分支最近4条单行的图形演变历史
git help --web log 跳转到git log的帮助文档网页
git branch -v 查看本地的分支
git checkout -b 创建分支
2.使用图形化界面的方式查看版本演变历史
在命令行中输入gitk这个命令就会弹出一个图形化界面
如果输入之后没有弹出来框,需再敲一条命令sudo apt-get install gitk,这样就有了gitk图形界面管理了
在这里插入图片描述
3. .git目录中都包括什么呢?
在这里插入图片描述
其中config:是项目特有的Git配置文件
description:是GitWeb专用的文件
info:文件夹是全局性排除文件,它和.gitignore是互补的。里面就一个exclude文件。
hooks: 这个目录存放一些shell脚本,可以设置特定的git命令后触发相应的脚本; 在搭建gitweb系统或其他git托管系统 会经常用到hook script。
HEAD:主要记录每次的变更操作,所有类型的变更都会记录的哦
在这里插入图片描述查看HEAD的内容
如果切换分支,HEAD的内容会发生变化
git reflog命令查询出的列表就是HEAD中存储的列表
objects:该目录存放所有的Git对象,对象的SHA1哈希值(一共40位)的前两位是文件夹名称,后38位作为存在相应文件夹下对象的文件名。
COMMIT_EDITMSG文件提交的是最近一次提交的描述信息
config:这个是GIt仓库的配置文件
在这里插入图片描述
查看config内容:cat config 跟本地仓库相关的信息都存储在这个配置文件下。比如配置user.name名字一边换,config文件下存储的名字也就跟着改变了。
description:仓库的描述信息,主要给gitleb等git托管系统使用
index:这个文件就是我们前面提到的暂存区(stage),是一个二进制文件
HEAD文件里面只存储了当前分支的关联
比如0b这个文件夹,它里面有一系列git对象(也就是文件),里面所有文件的38位的名称加上0b,就组成原来的40位的哈希值了。
更近一步说,我们每次提交新文件到git上时,这时会根据该文件内容计算生成一个40位的哈希值,假如生成的是0c7bcc3f8f1c5311d06e3067f7f7dddecb8668fe,这个文件的存储方式就是先截取0c作为文件夹名称,然后后面的38位7bcc3f8f1c5311d06e3067f7f7dddecb8668fe作为文件名称,存储在0c文件夹下。
如果这时你又提交了一个文件或者修改了一个文件碰巧又生成一个以0c开通的哈希值,那么这个时候就会直接截取该哈希值的后38位作为该次生成的git对象的文件名,存储在原来已经存在的0c文件夹下。
在这里插入图片描述
refs :提交对象的指针。
在这里插入图片描述
heads: 该文件夹存储的是所有的本地分支文件,每一个本地分支文件中,存储的是一个哈希值,每一次commit都是生成一个对应的哈希值,然后用这次新生成的哈希值,替换掉原来这个分支文件中的哈希值。
tag:标签 也称为里程碑,v1.0
这个文件结构是git初始化的样子,其实还会有别的文件,例如有个相当重要的index。它记录的是暂存区的信息。就被已经git add的内容。
ls:查看当前磁盘中都包括什么目录文件
ls -al 可以查看当前文件夹下所有类型的文件
//cat命令主要用来查看文件内容,创建文件,文件合并,追加文件内容等功能。
cat HEAD 查看HEAD文件的内容
git cat-file 命令 显示版本库对象的内容、类型及大小信息。
git cat-file -t b44dd71d62a5a8ed3 显示版本库对象的类型
git cat-file -s b44dd71d62a5a8ed3 显示版本库对象的大小
git cat-file -p b44dd71d62a5a8ed3 显示版本库对象的内容

HEAD:指向当前的工作路径
config:存放本地仓库(local)相关的配置信息。
refs/heads:存放分支
refs/tags:存放tag,又叫里程牌 (当这次commit是具有里程碑意义的 比如项目1.0的时候 就可以打tag)
objects:存放对象 .git/objects/ 文件夹中的子文件夹都是以哈希值的前两位字符命名 每个object由40位字符组成,前两位字符用来当文件夹,后38位做文件。

猜你喜欢

转载自blog.csdn.net/qq_37982823/article/details/85711688