HEAD 和 master 的区别

Posted

技术标签:

【中文标题】HEAD 和 master 的区别【英文标题】:Difference between HEAD and master 【发布时间】:2011-05-22 04:18:19 【问题描述】:

Git 中的HEADmaster 有什么区别?

我在 GitHub 上克隆了一个项目,并希望将我的更改推送到远程。但是我应该推到哪一个呢?

【问题讨论】:

【参考方案1】:

简单的答案是HEAD 是指向您当前所在分支的最新提交的指针/标签。 master 是您在初始化 git 存储库时创建的默认分支(例如 git init)。

您可以删除master 分支(例如git branch -D master)。您不能删除 HEAD 指针。

【讨论】:

"HEAD 是指向您当前所在分支的最新提交的指针/标签。"我认为这充其量是误导。如果您签出较旧的提交,则 HEAD 现在是指向该较旧提交的指针,而不是最近的提交。对吗? 你是对的。 HEAD 是您的最新结帐。但在我的辩护中,对于 Git,checkout 命令相当于在其他常见的 SCM 系统中切换分支。 我很同情...我很容易犯同样的错误。我注意到的唯一原因是因为我正处于尝试研究 HEAD 真正含义的阶段。你有没有机会编辑你的答案是正确的?对于像我这样的非 git 专家,我发现 HEAD 是一个很难找到准确描述的概念。并且在网络上提供关于 HEAD 的不正确信息的建议会使它变得相当困难。 我认为您的评论对于任何想要更深入地了解 Git HEAD 指针到底是什么的人来说都是一个极好的澄清。我很欣赏你的评论,并认为其他人也会。我的原始帖子内容与您的后续评论相得益彰。谢谢。 技术性问题,但如果您签出较旧的提交,则您不再“在”分支上。如果你签出一个提交而不是一个分支,你就有了所谓的“分离的 HEAD”,你不再是“在一个分支上”。 “在一个分支上”意味着您的 HEAD 正在引用一个分支,并且根据定义,您处于该分支的最新提交中。仅仅因为您已签出提交“b54fe7”,并且 master 指向该提交,并不意味着您在 master 分支上。可能有多个分支指向同一个提交,如果有的话,你就在 HEAD 指向的那个分支上。【参考方案2】:

master 是对分支结尾的引用。按照惯例(默认情况下),这通常是主要的集成分支,但并非必须如此。

HEAD 实际上是一种特殊类型的引用,它指向另一个引用。它可能指向master 也可能不是(它将指向当前签出的任何分支)。如果您知道要提交到 master 分支,请推送到此。

这是一个视觉示例:

在您自己的存储库中,您可以通过运行以下命令检查HEAD 指向的位置:

$ git symbolic-ref HEAD
refs/heads/master

但是,找出remotes/origin/HEAD 指向的位置比较棘手,因为它位于远程计算机上。

这里有一个关于 git 参考的很棒的小教程:

http://people.gnome.org/~federico/news-2008-11.html#pushing-and-pulling-with-git-1

【讨论】:

+1 比我的答案更准确。有关这些概念的说明,另请参阅 ***.com/questions/3301956/… 和 ***.com/questions/3301956/…。 “分支结束”是什么意思?我以为主人本身就是一个分支......【参考方案3】:

只需推送当前分支的更改

git push origin

它会将您的分支“B”更改为“origin/B”。 如果您在 master 分支上,git 将推送到 origin/master。 实际上,它会将所有更改推送到在origin 具有匹配远程分支的本地分支上。它由配置设置 push.default 控制。 另见pushing RefSpecs in the Pro Git book。


您看到的是代表GitX project 的Experimental GitX fork 中远程回购的所有参考规范的侧边栏。

HEAD 将指定该遥控器的默认分支。 见git remote set-head man page:

不需要为远程设置默认分支,但允许指定远程的名称来代替特定分支。 例如,如果origin 的默认分支设置为master,则可以在通常指定origin/master 的任何位置指定origin

【讨论】:

以上是关于HEAD 和 master 的区别的主要内容,如果未能解决你的问题,请参考以下文章

git -- Fast forward(快进模式)和 no-ff 区别

xenserver master和slave的区别

Git使用记录

Git使用记录

Git使用记录

分离头指针(detached HEAD)