HEAD 和 master 的区别
Posted
技术标签:
【中文标题】HEAD 和 master 的区别【英文标题】:Difference between HEAD and master 【发布时间】:2011-05-22 04:18:19 【问题描述】:Git 中的HEAD
和master
有什么区别?
我在 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 的区别的主要内容,如果未能解决你的问题,请参考以下文章