HEADとマスターの違い


188

HEADmasterin Gitの違いは何ですか?

GitHubでプロジェクトのクローンを作成し、自分の変更をリモートにプッシュしたいと考えています。しかし、どちらにプッシュすればよいですか?

スクリーンショット

回答:


162

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
+1私よりも正確な答え。これらの概念に関する図については、stackoverflow.com / questions / 3301956 / およびstackoverflow.com/questions/3301956/…も参照してください。
VonC

37

簡単な答えは、HEAD現在ブランチにある最新のコミットへのポインタ/ラベルです。mastergitリポジトリを初期化したときに作成されるデフォルトのブランチです(例:)git init

masterブランチ(例:)を削除できgit branch -D masterます。HEADポインタは削除できません。


6
HEAD現在ブランチにある最新のコミットへのポインタ/ラベルです。」これはせいぜい誤解を招くだけだと思います。古いコミットをチェックアウトすると、HEADは最新のコミットではなく、その古いコミットへのポインターになります。正しい?
LarsH 2016年

2
あなたは正しいです。HEADは最新のチェックアウトです。しかし、私の弁護では、Gitにcheckoutとって、このコマンドは他の一般的なSCMシステムでブランチを切り替えるのと同等です。
benhorgen

1
私は同情します...私は同じ過ちを簡単に犯したかもしれません。私が気づいた唯一の理由は、HEADが本当に何を意味するのかを調査しようとしている段階にあるからです。正解になるように回答を編集できる可能性はありますか?私のようなgitの非専門家にとって、HEADは正確な説明を見つけるのが難しい概念だと思います。そして、HEADに関する誤った情報を提供するアドバイスをウェブ上に置いておくと、それはかなり難しくなります。
LarsH 2016

2
あなたのコメントは、Git HEADポインターが実際に何であるかをより詳しく理解しようとしている人にとっては素晴らしい説明だと思います。私はあなたのコメントに感謝し、他の人もそうすると思います。私の元の投稿の内容とあなたのフォローアップコメントは互いに補完し合っています。ありがとう。
benhorgen

4
技術的ですが、古いコミットをチェックアウトした場合、ブランチに「いる」ことはありません。ブランチの代わりにコミットをチェックアウトすると、「デタッチされたヘッド」と呼ばれるものがあり、「ブランチ上」ではなくなります。「ブランチ上」とは、HEADがブランチを参照していることを意味し、定義により、そのブランチの最新のコミットをしていることになります。コミット 'b54fe7'をチェックアウトしていて、マスターがそのコミットをポイントしているからといって、マスターブランチにいるとは限りません。同じコミットを指すブランチが複数ある場合があります。HEADが指すブランチがあれば、それが「オン」になります。
Jason Goemaat 2016年

8

現在のブランチの変更をプッシュするだけです

git push origin

そして、ブランチ ' B'の変更を ' origin/B'にプッシュします。ブランチに
いる場合master、gitはにプッシュしorigin/masterます。
実際には、で一致するリモートブランチを持つローカルブランチ上のすべての変更がプッシュされoriginます。これは、構成設定push.defaultによって制御されます。Pro GitブックのRefSpecsのプッシュ
も参照してください。


表示されているのは、GitXプロジェクトの実験的GitXフォーク内のリモートリポジトリのすべてのrefspecを表すサイドバーです。

代替テキスト

HEADそのリモートのデフォルトのブランチを指定します。manページを
参照してgit remote set-headください

リモートにデフォルトのブランチを用意する必要はありませんが、特定のブランチの代わりにリモートの名前を指定できます。
例えば、場合のデフォルトのブランチがoriginに設定されmaster、その後、originあなたは通常、指定しますどこに指定することができますorigin/master

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.