2011-11-19 344 views
119

当我学习git时,我总是碰到HEAD,master,origin的术语,我不确定它们有什么区别。如果我理解正确,HEAD总是等于最新版本?如果是这样,是整个存储库的最新版本,还是特定分支或标签的最新版本?这很混乱。我已经阅读了很多这方面的教程和分支/合并等东西,但仍然无法围绕它进行考虑。HEAD,master,origin的git概念是什么?

回答

154

我强烈推荐本书"Pro Git" by Scott Chacon。花点时间,真正阅读它,同时探索实际的git回购。

HEAD:当前提交您的回购。大部分时间HEAD都指向您分支中的最新提交,但不一定如此。 HEAD真的只是意味着“我的回购目前指向什么”。

如果提交HEAD引用不是任何分支的提示,则称为“分离头”。

master:git在首次创建回购库时为您创建的默认分支的名称。在大多数情况下,“主人”是指“主要分支”。大多数商店都有人推动掌握,而主人被认为是回购的权威观点。但是释放分支从主分离释放也很常见。您的本地回购有其自己的主分支,几乎总是遵循远程回购的主人。

原点:git给你的主远程仓库的默认名称。你的盒子有自己的回购,并且你很可能推出一些你和你的同事推动的远程回购。这个远程回购几乎总是被称为起源,但它不一定是。

HEAD是git中的官方概念。 HEAD总是有一个明确的含义。 masterorigin是通常在git中使用的常用名称,但它们不一定是。

+0

你是什么意思?“HEAD的意思是”我的回购商目前指的是什么“。如果存储库中有多个分支,哪一个是根据你的HEAD?如果有3个分支(与主人一起),并且需要在分支A中进行提交,那么HEAD仍然可以处于“主”的提交中。那么,回购商现在指的是哪一个版本? – OK999

31

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

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

origin是通常给予主遥控器的名称。远程是另一个可以从中提取并推送到的存储库。通常它在一些服务器上,比如github。

+0

你能举一个什么时候HEAD是最新的但不是最新的例子吗?我以前从来没有见过。或者你的意思是它可能不是最新的,因为你的分支在它跟踪的远程分支后面? –

+9

@MattGreer:如果你检出一些旧的东西(比如像'git checkout v1.1'这样的标签),那么你的HEAD变成了该标签的提交。它可能不是最新的提交。 –

10

虽然这并不直接回答这个问题,但有很棒的书可以免费使用,这将帮助您了解基本知识,称为 ProGit。如果你更喜欢死木版本的收集,你可以从Amazon购买它。

+3

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – nha