git如何实现branch的?

一、git中三大对象commit、tree和blob之间的关系

使用git最基本的命令行就是add 之后进行commit,每次commit之后才能进行push操作,这些是大家都知道的步骤。而git中的三大对象commit、tree和blob又指的是什么,它们之间又有什么关系呢,对此进行简单介绍与记录。

首先通过一幅图来进行引入

从图中可以清楚的看到,一个commit对象里面会包含有 tree(相当于文件夹)、parent、author和committer;一个tree里面会包含tree和blob(具体的内容);而一个blob指的就是具体的文件内容。在git中,blob与文件名无关,只与文件内容有关,即文件内容相同,在git中是同一个blob。

二、分支的概念


Branches are named pointers to commits:分支是指向commits的有名指针。

像上图所示,master指向具体的一个 commit:a219fd,所以 master 是一个分支;dev 指向具体的一个 commit:e78125,所以 dev 也是一个分支。

当前我们有两个问题需要解决:

分支指向的commit 保存在什么地方(即如何知道 master 分支指向的commit值)?
在多个分支的情况下,我们怎么知道当前所处的分支是哪一个?

三、HEAD指针

我们可以看到,如上图所说:

HEAD是一个特殊的指针,HEAD指针指向当前工作的分支;
HEAD指针总是指向当前工作的分支的最近(最新)一次 commit;
如上图,当前HEAD指针指向了master分支,所以当前的工作分支是 master分支;同时 master 分支指向的 commit 是 a219fd,也就是上面说的:HEAD指针总是指向工作分支的最近一次 commit。

如果需要切换分支,如切换到 dev 分支。我们可以把 HEAD指针指向 dev 分支,那么 dev 分支就是当前的工作分支了。同时 HEAD指向指向工作分支的最近一次 commit e78125。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值