关于Git的暂存区这个概念的理解.
Git中的暂存区成为stage或者是index.可以理解成一个"提交任务".Git暂存区是Git最成功的设计之一,但是也是最难理解的.
暂存区是一个介于工作区和版本库的中间状态.当执行提交的时候,实际上是将暂存区的内容提交到版本库中.
而且Git的很多命令都会涉及暂存区的概念.例如 git diff命令.
(什么是HEAD,什么是master,为什么他们两者可以相互替换使用,为什么Git中的很多对象(如提交树,文件内容等)都用40位的SHA1哈希值来表示?)
在版本库中 .git 目录中有一个index文件.需要运行git diff命令才能看到index文件的日期时间戳的变化.
其具体操作步骤如下:
1.首先执行git checkout命令,撤销工作区中welcome.txt文件sang
>>>>>>>>>>>>>未完待续>>>>>>>>
关于暂存状态:

绝对文件的四种状态:

>>>>>>>>>>>>>>>>未完待续>>>>>>>>>>>>>>>>>>>>>>>>>>
关于 $ git stash 命令
git stash 就用于保存当前工作进度的.

一开始运行git status 一些未提交的改动都存在,但是运行完 git stash之后,再查看工作区状态 git status ,会看见工作区尚未提交的改动(包括暂存区的改动)全都不见了.
因为执行了git stash命令来将工作区和暂存区的改动全部封存起来,所以执行下面的命令会看到工作区和暂存区没有改动

(-s 是精简输出simple , -b是同时显示出当前工作分支的名称,branch)
git branch 是分支管理的主要命令.也可以显示当前的工作分支.

在master分支名称前的星号表明这个分支是当前工作分支.
现在连续执行下面的三个命令会看到相同的输出:

以上三个具有相同的输出:也就是说当前版本库中,HEAD,master和 refs/heads/master具有相同的指向.
现在当版本库(.git文件夹)中看一下究竟怎么回事.

找到了4个文件,其中在.git/logs目录下的文件暂且不说,把目光集中在.git/HEAD和.git/refs/heads/master上/
显示一下.git/HEAD的内容.

引用的就是.git/HEAD和.git/refs/heads/master 看一下这个文件的内容.

显示的e5b70@##$$$是什么东西?用git cat-file命令查看

是一个commit对象,显示这个commit的对象提交的内容:

原来分支master指向的是一个提交ID,是最近的一次提交.这样的分支实现多么巧妙,:
既然可以从任何提交开始建立一条历史跟踪链,用一个文件执行这个链条的最新提交,那么这个文件就可以追溯整个提交历史了,这个
文件就是.git/refs/heads/master文件.
一个更真实的版本库结构图:

目录.git/refs 是保存引用的命名空间.其中.git/refs/heads 目录下的引用又称为分支.
对于分支,既可以使用正规的长格式的表示法,如refs/heads/master,也可以直接用master来表示.
一个提交中居然包含了三个SHA1哈希值表示的对象ID:

第一行commit @!@@@### 这个是本次提交的唯一标识.
第二行 tree @@##$$$$ 这个是本次提交所对应的目录树
第三行 parent &*(*^&^%%% 这个是本地提交的父提交(上一次提交)
研究Git对象ID的一个重量级武器就是git cat-file命令.见下图:
在引用对象ID的时候,没有必要把整个的40位ID写全.只要从头开始的几位不冲突即可.

下面再用git cat-file 命令查看一下这几个对象的内容.
commit对象e5b70b@##$#@@@@@

tree对象 65443c$%^&$$###
并且可以看到多了一个新类型的对象:blob对象,这个对象保存者各个文件对应的内容.
用$ git cat-file -p @#$#$ 命令显示了welcome.txt中的内容.

这些对象保存在了哪里?当然是Git库中的objects目录下了(ID的前2位作为目录名,后38位位文件名)

Git对象库中各个对象之间的关系见下图:

通过提交Commit对象之间的相互关联,可以很容易的识别出一条跟踪链.
HEAD和master的讲解:
关于Git的暂存区这个概念的理解.的更多相关文章
- 【原创】Git删除暂存区或版本库中的文件
0 基础 我们知道Git有三大区(工作区.暂存区.版本库)以及几个状态(untracked.unstaged.uncommited),下面只是简述下Git的大概工作流程,详细的可以参见本博客的 ...
- Git 暂存区的概念
工作区:我们在电脑里面能看到的目录,也就是我们用git init 命令初始化的那个目录.里面包含要添加文件和需要提交的文件,在这个目录下的文件,修改和变更,我们的git都能感知的到. 版本库:工作区有 ...
- Git-工作区和暂存区的概念
工作区(Working Directory):就是在电脑里能看到的目录,如testcase文件夹就是一个工作区. 版本库(Repository):工作区有一个隐藏目录.git,是Git的版本库. ...
- git 查看暂存区
一.简介 git ls-files 命令是用来查看暂存区中文件信息 二.常用参数 参数说明(括号里是简写) --cached(-c)显示暂存区中的文件,git ls-files命令默认的参数 --de ...
- git分布式版本控制系统权威指南学习笔记(二):git add暂存区的三个状态以及暂存区的理解
文章目录 不经过git add(到暂存区),能直接进行commit吗? 举个
- Git撤销暂存区stage中的内容
$ git add readme.txt提交到了stage中. $ git statusOn branch masterChanges to be committed: (use "git ...
- Git(工作区和暂存区概念)
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工 ...
- git 教程(5)--工作区和暂存区
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 工作区(working directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区: 版本库 ( ...
- git(工作区,暂存区,管理修改,撤销修改,删除文件)
工作区和暂存区 984次阅读 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的l ...
随机推荐
- Zabbix探索:纠结的选择
Zabbix拥有两种分布式部署的架构,分别是: Master-Node-Client: Master-Proxy-Client: 两者的区别什么的官方有介绍,但是太过于笼统,对细节介绍的太少,幸亏之前 ...
- Solaris10下Telnet、SSH、ftp使用root登录
学习solaris过程中,使用SecureCRT.putty等工具用root账号登录,总是登录不上去,后来经老师解答和网上找答案,发现是 solaris默认是不可以远程使用root账号登录的,如果想开 ...
- MFC定时器
比较简单,在程序中可以找到原型. 在程序中我们经常要使用定时刷新的功能,典型的应用是在信息管理系统中表单要跟着数据库中的数据变动.MFC提供了定时器来完成这个功能. ================= ...
- SQL Server优化相关的工具脚本
SQL Server性能优化的一些常用脚本,适用于SQL Server 2008,更高的版本某些系统表的字段有所不同,建议参考MSDN. 死锁相关 /************************* ...
- 【zoj3254】Secret Code
题意: 给出a.p.d.m 求a^x=d(mod p) 0<=x<=m 的解的个数 题解: 今天一整天的时间大部分都在调这题Orz BSGS什么的还是太不熟了 我们可以用BSGS拓展版求出 ...
- EM算法原理简析——图解
一. 扯淡 转眼间毕业快一年了,这期间混了两份工作,从游戏开发到算法.感觉自己还是喜欢算法,可能是大学混了几年算法吧!所以不想浪费基础... 我是个懒得写博客的人,混了几年coding,写的博客不超过 ...
- MAX16054
MAX16054是带有单个开关去抖以及内部闭锁电路的按键通/断控制器,可接受机械开关产生的嘈杂输入,并经过一个有工厂设置的延迟时间后产生干净的数字锁存输出. 开关通.断期间,MAX16054无接触抖动 ...
- yii2 i18n学习
举例说明常见的翻译:Yii::t('app','Login'):追踪源码:BaseYii.php 文件 ,Yii::t($category, $message, $params = [], $lang ...
- Java NIO 备忘
$.backlog:可以把它简单理解为一个 listening socket 的请求连接队列的限制.当队列中的连接请求达到队列限制时,kernel 会拒绝信的连接请求.只有当应用程序通过 accept ...
- HDU2177:取(2堆)石子游戏(威佐夫博弈)
Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同 ...