【发布时间】:2011-05-22 04:18:19
【问题描述】:
Git 中的HEAD 和master 有什么区别?
我在 GitHub 上克隆了一个项目,并希望将我的更改推送到远程。但是我应该推到哪一个呢?
【问题讨论】:
Git 中的HEAD 和master 有什么区别?
我在 GitHub 上克隆了一个项目,并希望将我的更改推送到远程。但是我应该推到哪一个呢?
【问题讨论】:
简单的答案是HEAD 是指向您当前所在分支的最新提交的指针/标签。 master 是您在初始化 git 存储库时创建的默认分支(例如 git init)。
您可以删除master 分支(例如git branch -D master)。您不能删除 HEAD 指针。
【讨论】:
HEAD 是指向您当前所在分支的最新提交的指针/标签。"我认为这充其量是误导。如果您签出较旧的提交,则 HEAD 现在是指向该较旧提交的指针,而不是最近的提交。对吗?
checkout 命令相当于在其他常见的 SCM 系统中切换分支。
HEAD 指针到底是什么的人来说都是一个极好的澄清。我很欣赏你的评论,并认为其他人也会。我的原始帖子内容与您的后续评论相得益彰。谢谢。
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
【讨论】:
只需推送当前分支的更改
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。
【讨论】: