- Git引用
Git引用
现在再来看引用,就会很简单了。如果我们想要看某个提交记录之前的完整历史,就必须记住这个提交ID,但提交ID是一个40位的 SHA-1 校验和,难记。所以引用就是SHA-1 校验和的别名,存储在.git/refs
文件夹中。
最常见的引用也许就是master
了,因为这是Git默认创建的(可以修改,但一般不修改),它始终指向你项目主分支的最后一次提交记录。如果在项目根目录运行cat .git/refs/heads
,会输出一个SHA-1 校验和,例如:
$ cat .git/refs/heads/master
4f3e6a6f8c62bde818b4b3d12c8cf3af45d6dc00
因此master
只是一个40位SHA-1 校验和的别名罢了。
还有一个问题,Git如何知道你当前分支的最后一次的提交ID?在.git
文件夹下有一个HEAD
文件,像这样:
$ cat .git/HEAD
ref: refs/heads/master
HEAD
文件其实并不包含 SHA-1 值,而是一个指向当前分支的引用,内容会随着切换分支而变化,内容格式像这样:ref: refs/heads/<branch-name>
。当你执行git commit
命令时,它就创建了一个commit
对象,把这个commit
对象的父级设置为 HEAD
指向的引用的 SHA-1 值。
再来说说 Git 的 tag,标签。标签从某种意义上像是一个引用, 它指向一个 commit
对象而不是一个 tree
,包含一个标签,一组数据,一个消息和一个commit
对象的指针。但是区别就是引用随着项目进行它的值在不断向前推进变化,但是标签不会变化——永远指向同一个 commit
,仅仅是提供一个更加友好的名字。