GitのHEAD
とmaster
の違いは何ですか?
GitHubでプロジェクトのクローンを作成し、変更をリモートにプッシュしたい。しかし、どちらにプッシュする必要がありますか?
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
簡単な答えは、HEAD
は現在のブランチの最新のコミットへのポインター/ラベルであるということです。 master
は、gitリポジトリを初期化したときに作成されるデフォルトのブランチです(例:git init
)。
master
ブランチを削除できます(例:git branch -D master
)。 HEAD
ポインターは削除できません。
現在のブランチの変更をプッシュするだけです
git Push Origin
ブランチ「B
」の変更を「Origin/B
」にプッシュします。master
ブランチにいる場合、gitはOrigin/master
にプッシュします。
実際には、Origin
に一致するリモートブランチを持つローカルブランチのすべての変更をプッシュします。構成設定Push.defaultによって制御されます。
「 Pro GitブックのRefSpecsをプッシュする 」も参照してください。
表示されているのは、 GitXプロジェクト の Experimental GitX fork にあるリモートリポジトリのすべての参照仕様を表すサイドバーです。
HEAD
は、そのリモートのデフォルトのブランチを指定します。git remote set-head
manページ を参照してください。
リモートにデフォルトのブランチを用意する必要はありませんが、特定のブランチの代わりにリモートの名前を指定できます。
たとえば、Origin
のデフォルトのブランチがmaster
に設定されている場合、Origin/master
を通常指定する場所であれば、Origin
を指定できます。