我注意到git能够结帐到特定的提交。之后,我开始明白git是如何运作的。
但我想确定这是正确的: 当我创建一个分支时,它只不过是一个指向当前提交的标记。当我签出这个分支时,我会检查这个“标签”指向的提交。现在,当我提交某些内容时,会创建一个新提交。现在已检出的分支标记现已更新,因此它指向新的提交。
所以......事实上,我可以手动完成所有这些,对吧? 这只是让事情变得简单的一个功能。
答案 0 :(得分:7)
是的,这是分支机构的好模型。但要注意术语 - git也有标签的概念,但标签不会移动 - 它们永远指向相同的提交。
更新:添加一些可能感兴趣的细节......
您当前的分支存储在文件HEAD
中,该文件指向分支,在这种情况下,内容如下所示:
ref: refs/heads/master
...或者它直接指向提交,在这种情况下,内容将如下所示:
2b45553eec2019594724dcbb4c252a74cbb5f38e
在前一种情况下,分支master
在创建新提交时会提前,但在后一种情况下(由于显而易见的原因称为“分离的HEAD”),创建时不会更改分支一个新的提交。
答案 1 :(得分:4)
Branch是一个引用指针,它指向当前提交,如你所说。
但你不应该互换使用这些词语,因为它们意味着别的东西。
答案 2 :(得分:3)
是的,对于git,分支基本上只是对提交时的提交的引用。正如你所说,你可以自己跟踪它。
实际上,git公开了所有构建更高级抽象的低级块。如果您想要使用git hash-object
,git mk-tree
和git commit-tree
这样的命令,可以手动执行git add
和git commit
(如果需要)(请参阅{{3} Git Book中的章节知道如何详细说明。)
请注意,git有两种标记。轻量级标签只是提交(通过其哈希)不会自动移动的引用。还有Raw Git的概念是真正的git对象,像提交一样存档,并且可以包含消息和签名。