Git中的HEAD和master有什么区别?

我在GitHub上做了一个项目的克隆,想把我的更改推到远程。但我该按哪一个呢?


只需推动当前分支的更改

git push origin

它会将你的分支'B'更改为'origin/B'。 如果你在你的master分支上,git会推送到origin/master。 实际上,它将在本地分支上推送所有更改,这些本地分支在原点上具有匹配的远程分支。它由配置设置push.default控制。 参见Pro Git书中的RefSpecs。


您所看到的是代表GitX项目实验性GitX分支中远程回购的所有refspecs的侧栏。

HEAD将为该远程指定默认分支。 参见git远程机头手册页:

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


Master是对分支结尾的引用。按照惯例(默认情况下),这通常是主要的集成分支,但不一定非得如此。

HEAD实际上是一种特殊类型的引用,它指向另一个引用。它可以指向master,也可以不指向(它将指向当前签出的分支)。如果你知道你想要提交到主分支,那么就推到这里。

下面是一个直观的例子:

在你自己的存储库中,你可以通过运行这个来检查HEAD指向的位置:

$ git symbolic-ref HEAD
refs/heads/master

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

这里有一个关于git引用的小教程


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

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