HEAD,master,origin的git概念是什么?


193

当我学习git时,我不断遇到HEAD,master,origin等术语,我不确定它们之间有什么区别。如果我理解正确,HEAD总是等于最新版本吗?如果是这样,那是整个存储库还是特定分支或标记的最新版本?这真令人困惑。我已经阅读了很多关于此的教程以及诸如分支/合并之类的东西,但是仍然无法解决。

Answers:


226

我强烈推荐Scott Chacon撰写的《 Pro Git》一书。花一些时间并真正阅读它,同时像您一样探索实际的git repo。

HEAD:您的存储库中的当前提交已打开。大多数时间都HEAD指向当前分支中的最新提交,但并非必须如此。HEAD真的只是意味着“我的仓库当前指向什么”。

如果提交HEAD所指的不是任何分支的尖端,则称为“分离头”。

master:git在首次创建存储库时为您创建的默认分支的名称。在大多数情况下,“主”是指“主分支”。大多数商店都要求所有人都在掌握,而主人被认为是仓库的权威。但是,通常也可以将发行分支从母版中剥离出来进行发行。您的本地仓库有自己的master分支,几乎总是跟随远程仓库的master。

origin:git给您的主远程仓库的默认名称。您的盒子有自己的存储库,您很可能将其推送到您和所有同事推送到的某个远程存储库。那个远程仓库几乎总是被称为起源,但不一定如此。

HEAD是git中的正式概念。HEAD始终具有明确的含义。master并且origin是git中常用的通用名称,但不一定必须如此。


您的意思是“ HEAD实际上仅表示“我的存储库当前指向的是什么”。如果存储库中有多个分支,那么根据您的情况,HEAD是哪个?如果有3个分支(与master一起),并且在branchA中进行了需要提交,则HEAD仍可以在'master'的提交中。那么,回购现在指向的是哪个版本?
OK999

2
不清楚您所说的回购(本地或远程)是什么意思。通常,您的答案使用的是表达式,而以前没有对其进行解释。

我只是在并行目录中进行了克隆,以便将我的工作目录与远程仓库的尖端进行比较。这是所有git答案的好结果。

@JingHe您读了整本书吗?是不是真的值得吗?我的意思是,我们是在谈论一个吓坏500+页阅读,似乎有点过分,我...
马克斯

1
为了验证我理解逻辑,我可以将远程分支称为FeatureA,当我推入该分支时,键入“ git push origin featureA”。我也可以通过说“ git pull origin featureA”来从遥控器中提取相同内容,进行更改。而head仅指本地副本。@ OK999我相信HEAD指向当前您在本地签出的任何分支。如果提交是在branchA中进行的,但当前您在branchB上,则HEAD指向branchB。在执行特定的提交之前,必须将HEAD移回branchA。
TLee

43

HEAD不是最新版本,而是当前版本。通常,它是当前分支的最新版本,但不一定如此。

master 是通常给主分支的名称,但是可以被称为其他任何名称(或者可能没有主分支)。

origin是通常给主遥控器使用的名称。remote是您可以从中拉出并推送到的另一个存储库。通常它在某些服务器上,例如github。


1
您能举例说明HEAD是最新版本而不是最新版本吗?我以前从未见过。或者您是说它可能不是最新的,因为您的分支位于它正在跟踪的远程分支的后面?
Matt Greer

12
@MattGreer:如果您签出一些较旧的内容(例如标记,如git checkout v1.1),那么您的HEAD将变为该标记的提交。它可能不是最新的提交。
Greg Hewgill

8

尽管这并不能直接回答问题,但是有免费的好书供您学习ProGit的基础知识 。如果您更喜欢废木版本而不是零碎版本,可以从Amazon购买。


9
问题没要书!我仍然不清楚,当我不需要C ++时,为什么需要一本git书。

11
您只认为您不需要C ++书籍;)
Piotr Perak
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.