git分支只是标签吗?

时间:2011-09-28 10:04:35

标签: git

我注意到git能够结帐到特定的提交。之后,我开始明白git是如何运作的。

但我想确定这是正确的: 当我创建一个分支时,它只不过是一个指向当前提交的标记。当我签出这个分支时,我会检查这个“标签”指向的提交。现在,当我提交某些内容时,会创建一个新提交。现在已检出的分支标记现已更新,因此它指向新的提交。

所以......事实上,我可以手动完成所有这些,对吧? 这只是让事情变得简单的一个功能。

3 个答案:

答案 0 :(得分:7)

是的,这是分支机构的好模型。但要注意术语 - git也有标签的概念,但标签不会移动 - 它们永远指向相同的提交。


更新:添加一些可能感兴趣的细节......

您当前的分支存储在文件HEAD中,该文件指向分支,在这种情况下,内容如下所示:

ref: refs/heads/master

...或者它直接指向提交,在这种情况下,内容将如下所示:

2b45553eec2019594724dcbb4c252a74cbb5f38e

在前一种情况下,分支master在创建新提交时会提前,但在后一种情况下(由于显而易见的原因称为“分离的HEAD”),创建时不会更改分支一个新的提交。

答案 1 :(得分:4)

Branch是一个引用指针,它指向当前提交,如你所说。

但你不应该互换使用这些词语,因为它们意味着别的东西。

答案 2 :(得分:3)

是的,对于git,分支基本上只是对提交时的提交的引用。正如你所说,你可以自己跟踪它。

实际上,git公开了所有构建更高级抽象的低级块。如果您想要使用git hash-objectgit mk-treegit commit-tree这样的命令,可以手动执行git addgit commit(如果需要)(请参阅{{3} Git Book中的章节知道如何详细说明。)

请注意,git有两种标记。轻量级标签只是提交(通过其哈希)不会自动移动的引用。还有Raw Git的概念是真正的git对象,像提交一样存档,并且可以包含消息和签名。