Git中的HEAD和master有什么区别?我在GitHub上做了一个项目的克隆,想把我的更改推送到远程。但是我应该推送到哪一个?
HEAD
master
disbfnqx1#
master是对分支末尾的引用。按照惯例,这通常是主集成分支,但它不一定是。(截至2020年7月发布的git v2.28.0,默认名称从master更改为main)HEAD实际上是一种特殊类型的引用,它指向另一个引用。它可能指向master/main,也可能不(它将指向当前 checkout 的分支)。如果你知道你想提交到master/main分支,那么就推到这个。下面是一个可视化示例:
main
在你自己的仓库中,你可以通过运行以下命令来检查HEAD指向的位置:
$ git symbolic-ref HEAD refs/heads/master
但是,找出remotes/origin/HEAD指向的位置更加棘手,因为它位于远程机器上。有一个关于git引用here的很棒的小教程
remotes/origin/HEAD
dba5bblo2#
简单的答案是HEAD是一个指针/标签,指向你当前所在分支的最近一次提交。master是初始化git仓库时创建的默认分支(例如git init)。您可以删除master分支(例如git branch -D master)。您不能删除HEAD指针。
git init
git branch -D master
vlju58qv3#
只需推送当前分支的更改
git push origin
它会将分支' B '的更改推送到' origin/B '。如果你在master分支上,git会推送到origin/master。实际上,它会将所有更改推送到本地分支上,这些本地分支在origin上有匹配的远程分支。它由配置设置push.default控制。另请参阅《Pro Git》手册中的推送RefSpecs。您看到的是侧边栏,它代表了GitX project的Experimental GitX fork中远程存储库的所有refspecs。
B
origin/B
origin/master
origin
HEAD将指定该远程的默认分支。参见git remote set-head man page:不需要为远程服务器指定默认分支,但允许指定远程服务器的名称来代替特定分支。例如,如果origin的默认分支设置为master,则可以在通常指定origin/master的位置指定origin。
git remote set-head
3条答案
按热度按时间disbfnqx1#
master
是对分支末尾的引用。按照惯例,这通常是主集成分支,但它不一定是。(截至2020年7月发布的git v2.28.0,默认名称从master
更改为main
)HEAD
实际上是一种特殊类型的引用,它指向另一个引用。它可能指向master
/main
,也可能不(它将指向当前 checkout 的分支)。如果你知道你想提交到master
/main
分支,那么就推到这个。下面是一个可视化示例:
在你自己的仓库中,你可以通过运行以下命令来检查
HEAD
指向的位置:但是,找出
remotes/origin/HEAD
指向的位置更加棘手,因为它位于远程机器上。有一个关于git引用here的很棒的小教程
dba5bblo2#
简单的答案是
HEAD
是一个指针/标签,指向你当前所在分支的最近一次提交。master
是初始化git仓库时创建的默认分支(例如git init
)。您可以删除
master
分支(例如git branch -D master
)。您不能删除HEAD
指针。vlju58qv3#
只需推送当前分支的更改
它会将分支'
B
'的更改推送到'origin/B
'。如果你在
master
分支上,git会推送到origin/master
。实际上,它会将所有更改推送到本地分支上,这些本地分支在
origin
上有匹配的远程分支。它由配置设置push.default控制。另请参阅《Pro Git》手册中的推送RefSpecs。
您看到的是侧边栏,它代表了GitX project的Experimental GitX fork中远程存储库的所有refspecs。
HEAD
将指定该远程的默认分支。参见
git remote set-head
man page:不需要为远程服务器指定默认分支,但允许指定远程服务器的名称来代替特定分支。
例如,如果
origin
的默认分支设置为master
,则可以在通常指定origin/master
的位置指定origin
。