2011-11-19 18 views
119

私はgitについて学んでいるので、私はHEAD、master、originという言葉を使い続けています。違いが何か分かりません。私が正しく理解すれば、HEADは常に最新のリビジョンに等しいですか?もしそうなら、リポジトリ全体、または特定のブランチやタグの最新のリビジョンですか?これはとても混乱しています。私はこれについて多くのチュートリアルを読んできましたが、ブランチング/マージのようなことはありましたが、それでも私の頭を包み込むことはできません。HEAD、master、originのgitの概念は何ですか?

答えて

154

本は、書籍"Pro Git" by Scott Chaconを強くお勧めします。時間をかけて実際にそれを読んで、あなたがしているように実際のgit repoを調べてください。

HEAD:あなたのレポがオンです。ほとんどの場合、HEADはブランチの最新のコミットを指していますが、そうである必要はありません。 HEADは、実際には「現在ポイントしているレポが何であるか」を意味します。

コミットHEADが参照するものが分岐の先端ではない場合、これは「分離ヘッド」と呼ばれます。

マスター:最初にリポジトリを作成するときにgitが作成するデフォルトブランチの名前。ほとんどの場合、「マスター」は「メインブランチ」を意味します。ほとんどのショップでは、誰もがマスターするように求めており、マスターはレポの決定的な見方と考えられています。しかしリリースブランチがリリースのためにマスターから作られるのも一般的です。ローカルリポジトリには独自のマスターブランチがあります。マスターブランチは、ほとんど常にリモートリポジトリのマスターに従います。

起源:gitがメインのリモートリポジトリに与えるデフォルトの名前。あなたの箱には独自のレポがあります。あなたとあなたの同僚が押し付けているいくつかの遠隔レポにあなたは押しつけられます。リモートリポジトリはほとんどいつも原点と呼ばれますが、必ずしもそうである必要はありません。

HEADはgitの公式な概念です。 HEADは常に明確な意味を持ちます。 masteroriginはgitで通常使用される一般的な名前ですが、必ずしもそうである必要はありません。

+0

「HEAD」とは、現在「私のレポが現在何を指しているのか」という意味ですか?リポジトリに複数のブランチがある場合、どのブランチがHEADですか?もし3つのブランチが(マスタと一緒に)存在し、branchAにコミットが必要であれば、HEADは依然として 'マスタ'のコミットになることができます。だから、レポが指し示しているリビジョンはどれですか? – OK999

31

HEADは最新のリビジョンではありません。現在のリビジョンです。通常、現在のブランチの最新リビジョンですが、必ずしもそうである必要はありません。

masterは、メインブランチに共通して与えられている名前ですが、他のものと呼ばれることもあります(またはメインブランチがない可能性があります)。

originは、メインリモートに共通に与えられる名前です。リモートは、あなたが引き出してプッシュできる別のリポジトリです。通常、githubのようなサーバー上にあります。

+0

HEADが最新で最新ではない場合の例を挙げることができますか?私はかつてそれを見たことがない。または、ブランチが追跡しているリモートブランチの背後にあるため、最新ではない可能性がありますか? –

+9

@MattGreer:古いもの( 'git checkout v1.1'のようなタグなど)をチェックアウトすると、HEADはそのタグのコミットに変わります。最新のコミットではないかもしれません。 –

10

これは直接質問には答えませんが、 ProGitという基本を学ぶのに役立つ素晴らしい本が無料で用意されています。デッドウッドバージョンをビットのコレクションにする場合は、Amazonから購入できます。

+3

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 – nha