你要说的关键一点——问题的来源——是
分支名称
一点也不重要,在吉特。他们只是
可移动指针
根据定义,它指向
最后的
在分支中提交。多个名称可以指向任何一个提交。
在Git中,是
提交
那很重要。提交是git的
raison d'être
. 提交只需创建一个hash id,因为与git的所有四种对象类型一样,hash id是提交内容的加密校验和。因为每个提交都是唯一的,所以它有一个时间戳来提供帮助,以防发生任何事情
其他的
关于提交的内容与前面的内容相同——每个提交都获取一个新的、唯一的散列ID。
然而,提交散列ID看起来是随机的,人类不可能记住或使用它。所以我们需要一些方法来命名我们想要记住的最新提交。一般来说,就是
分支名称
. 一旦我们有一个提交,我们可以指向它的任意数量的分支名称。
每个提交都会记住其父或父哈希ID,因此我们只需要记住最后一个,或者
提示
,分支机构的承诺–所有早期的承诺都可以从最后开始并向后工作。因此分支名称标识
提示
只有承诺。
当git创建
新的
提交,git只需将新提交的hash id写入
当前分支
. 当前的分支是哪个分支?答案同样简单:特别的名字
HEAD
保存当前分支的名称。
确保任何有用的git提交
可达成的
因为Git最终会
垃圾收集
任何无法实现的提交。也就是说,如果
xyz
标识提交
a123456...
,该提交受到垃圾收集器的保护。因此,它承诺的父母(或父母),祖父母,等等。git给了您一些时间(默认情况下,14天)来连接对象,以便通过这种可达性思想来保护对象(包括提交):首先创建一个对象,比如blob、树或提交,然后更新任何需要的名称,以便能够找到该对象及其任何祖先。在创建对象之后,14天的窗口是完成名称更新的宽限期。