HEAD、マスター、オリジンのGitコンセプトは何ですか?


193

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

回答:


227

Scott Chaconの「Pro Git」という本を強くお勧めします。実際のgitリポジトリを調べながら、時間をかけて実際に読んでください。

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

コミットがHEAD参照しているイベントがブランチの先端ではない場合、これは「切り離されたヘッド」と呼ばれます。

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

origin:gitがメインのリモートリポジトリに付けるデフォルトの名前。ボックスには独自のレポがあり、おそらくあなたと同僚全員がプッシュするリモートレポにプッシュします。そのリモートリポジトリは、ほとんどの場合、オリジンと呼ばれますが、そうである必要はありません。

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


「HEAD」とはどういう意味ですか?「現在、私のリポジトリは何を指しているのか」を意味します。リポジトリに複数のブランチがある場合、どちらがHEADですか?3つのブランチ(およびマスター)があり、ブランチAで必要なコミットが行われた場合、HEADはまだ「マスター」のコミットにある可能性があります。では、リポジトリが現在指しているリビジョンはどれですか?
OK999

2
リポジトリ(ローカルまたはリモート)の意味が明確でない。一般的に、あなたの答えは前にそれらを説明することなく、表現を使用します。

作業ディレクトリをリモートリポジトリの先端と比較するために、並列ディレクトリでクローンを作成しました。これはすべてのgitの回答がどれほど優れているかです。

@JingHeあなたは本全体を読みましたか?それは本当に価値がありますか?つまり、500ページ以上のひどい読み物について話しているということですが、私には少し多すぎるようです...
Max

1
ロジックを理解していることを確認するには、リモートのブランチをfeatureAとして呼び出し、そのブランチにプッシュするときに「git push origin featureA」と入力します。「git pull origin featureA」と言って、リモートからも同じようにプルして変更できます。そしてヘッドはローカルコピーのみを参照しています。@ OK999 HEADがローカルで現在チェックアウトしているブランチを指していると思います。コミットがbranchAで行われたが現在ブランチBにいる場合、HEADはbranchBを指しています。特定のコミットを行う前に、HEADをbranchAに戻す必要があります。
TLee

43

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

master は一般的にメインブランチに付けられる名前ですが、他の名前でもかまいません(またはメインブランチが存在しない場合もあります)。

originメインのリモコンに一般的に付けられる名前です。リモートは、プルおよびプッシュできる別のリポジトリです。通常は、githubなどのサーバー上にあります。


1
HEADが最新であるが最新ではない場合の例を挙げられますか?今まで見たことがありません。または、ブランチが追跡しているリモートブランチの背後にあるため、最新ではない可能性があるということですか?
Matt Greer、

12
@MattGreer:古いタグ(などのタグgit checkout v1.1)をチェックアウトすると、HEADはそのタグのコミットに変更されます。最新のコミットではない可能性があります。
Greg Hewgill、

8

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


9
質問は本を求めていませんでした!C ++の本が必要ないのに、なぜgitの本が必要になるのかは、まだはっきりしていません。

11
C ++の本は必要ないと思っているだけです;)
Piotr Perak
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.