git分支只是标签吗?

8
我注意到git能够检出到特定的提交。之后,我开始了解git的真正工作原理。
但我想要确认这是正确的: 当我创建一个分支时,它只是一个指向当前提交的标签。当我检出这个分支时,我就检出了这个“标签”所指向的提交。现在,当我提交一些东西时,会创建一个新的提交。当前检出的分支标签现在会被更新,以便它指向新的提交。
所以...实际上,我可以手动完成所有这些,对吗? 这只是一个让事情变得更容易的功能。
3个回答

7

是的,这是分支的一个好模型。但要注意术语——git还有标签的概念,但标签不会移动——它们永远指向同一次提交。


更新:添加一些更详细的内容,可能会很有用...

你当前的分支存储在文件HEAD中,它指向一个分支,其中内容如下:

ref: refs/heads/master

如果该链接链接到一个分支,则其内容将显示为该分支的最新提交信息,或者它直接指向一个提交,此时其内容将如下所示:

2b45553eec2019594724dcbb4c252a74cbb5f38e

在前一种情况下,当您创建新的提交时,分支master将会被推进,但在后一种情况下(通常称为“分离的 HEAD”),当您创建新的提交时,不会更改任何分支。


4

分支是一个引用指针,它指向当前提交,就像您说的那样。

但是您不应该把这些词混淆使用,因为它们有不同的含义。


3

对于git来说,分支基本上只是一个指向提交的引用,当你提交时它会自动更新。就像你所说的,你也可以手动跟踪它。

实际上,git公开了所有低级块,这些块是更高级抽象所构建的基础。如果需要,你可以使用命令如git hash-objectgit mk-treegit commit-tree手动执行git addgit commit(请参阅Git Book中的原始Git章节以了解详细信息)。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接