提交对象
- commit提交对象:包含一个指向tree的指针和所有提交信息。
- 非首次提交时还包含一个指向上次提交对象(父对象)的指针。
- tree树对象:记录着目录结构和 blob 对象索引。
- blob 对象:保存着文件快照。
分支
- HEAD指针:指向当前所在的本地分支的特殊指针
- master分支:默认的初始分支
- testing分支:新创建的分支
图中有4个commit对象,默认的master分支和创建的testing分支。初始时HEAD指向master分支,然后checkout到testing分支。此时再次提交后testing分支自动向前移动,HEAD仍指向testing分支。
- 注意:分支切换会改变你工作目录中的文件,记住HEAD表示本地工作目录。
工作区域和文件状态
- 工作目录
- 暂存区域
- 文件仓库,git目录
- 未追踪状态(其他都是已追踪)
- 未修改状态
- 已修改状态
- 已添加到暂存区域,即暂存状态
一个工作目录下的文件在这四种状态中必居其一,比较特殊的是文件在暂存后又进行了修改,即同时处于已修改和已暂存状态。
分布式 Git简述
理解分支的概念后,下面的图片也就容易理解了。
可以看出黄色部分,从738ee开始是另外一个人的分支,但是已经提交到origin/master。绿色部分,从fbff5开始是自己本地本地的issue54分支。必须先切回本地master分支ledee,分别合并origin/master和issue54分支后,才可以提交。
理解了以上概念后,再熟悉具体的指令将会轻松许多。