git底层原理之各种refs(引用,指针)

git会使用每次commit的snapshot的哈希值做为被引用对象,通过HEAD, branch name, tag, fetch HEAD等等来指向不同的commit。

具体请参考文档:

Git Refs: What You Need to Know | Atlassian Git Tutorial

 简单来说,git将所有commit组成一个大的类似链表或者树的结构,每一个commit都指向他的一个或多个父节点。在这些commit集合中,如果划归branch,git采用的做法就是让该branch指向某一个commit,在该commit之前(包括他自己)所有的commit都属于该branch。

而tag跟branch的概念比较像,只不过tag是不可变的branch,就是tag也是指向一个commit,但是之后在该commit之后追加的commit不再属于该tag,这个branch不一样。

而HEAD就是指向当前处于active 的commit。比如你切换到一个branch,那HEAD和当前的branch name都指向同一个commit。当在该branch有新的commit, HEAD和branch name都指向最新的提交。

如果你checkout某一个commit, 而不是一个branch name,或者checkout出一个只读的远程branch,这是HEAD也都会指向对应的commit,只不过这时候是属于detach状态。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值