HEAD和master之间的区别

Fre*_*nck 172 git github master head

HEADmasterGit有什么区别?

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

截图

Lee*_*ton 154

master是对分支结束的引用.按照惯例(默认情况下),这通常是主要的集成分支,但它不一定是.

HEAD实际上是一种特殊类型的引用,指向另一个引用.它可能指向master 或不指向(它将指向当前检出的任何分支).如果你知道你想要进入master分支机构,那就推动这个.

这是一个视觉示例:

替代文字

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

$ git symbolic-ref HEAD
refs/heads/master
Run Code Online (Sandbox Code Playgroud)

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

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

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


ben*_*gen 33

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

您可以删除master分支(例如git branch -D master).您无法删除HEAD指针.

  • "`HEAD`是您当前所在分支的最新提交的指针/标签." 我认为这充其量是误导.如果您签出旧的提交,那么HEAD现在是指向旧提交的指针,而不是最近的提交.对? (4认同)
  • 技术性,但是如果你签出一个较旧的提交,你就不再"分支".如果你签出一个提交而不是一个分支,你有一个所谓的"分离的HEAD",你不再"在一个分支上"."在分支上"意味着您的HEAD引用了一个分支,根据定义,您处于该分支的最新提交.只是因为你已经签出了'b54fe7',并且指向了那个提交,并不意味着你在主分支上.可能有几个分支指向同一个提交,你正在'HEAD'指向的那个,如果有的话. (4认同)
  • 你是对的.HEAD是您的最新结账.但在我的辩护中,对于Git来说,`checkout`命令相当于在其他常见的SCM系统中切换分支. (2认同)
  • 我认为您的评论对于任何寻求更深入了解 Git `HEAD` 指针真正含义的人来说是一个极好的澄清。我很欣赏你的评论,并认为其他人也会。我的原帖内容与您的后续评论相辅相成。谢谢。 (2认同)

Von*_*onC 8

只需按下当前分支的更改即可

git push origin
Run Code Online (Sandbox Code Playgroud)

它会将你的分支B"改变为origin/B".
如果你在你的master分支机构,git将推动origin/master.
实际上它会推动具有匹配远程分支的本地分支上的所有更改origin.它由配置设置push.default控制.
另请参阅Pro Git书中的推送RefSpecs.


您所看到的是侧边栏,代表GitX项目Experimental GitX fork中远程仓库的所有refspec.

替代文字

HEAD将指定默认分支为远程.
git remote set-head手册页:

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