git branch -r" を実行したときに "origin/HEAD" が表示されるのはなぜですか?
git branch -rを実行すると、なぜ
origin/HEADがリストアップされるのでしょうか?たとえば、GitHub にあるリモートリポジトリに master と awesome-feature という 2 つのブランチがあるとします。git clone
でそれを取得し、新しいディレクトリに移動してブランチをリストアップすると、このように表示されます。
$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature
というような順番で表示されます(α版?この例は、無実のレポの身元を隠しておくためのフェイクです)。では、HEAD
ビジネスとは何でしょうか?最後に「押した」人が「押した」ときに「頭」を向けていたものなのでしょうか?それはいつも、その人が「押した」ものが何であったかになるのではないでしょうか?HEADは動き回るものです...なぜ私が他のマシンで誰かのHEADが指したものを気にしなければならないのでしょうか?
私はちょうどリモートトラッキングなどについて理解しているところなので、これは1つの長引く混乱です。ありがとうございます。
EDIT: 私は、専用のリモートリポジトリ(GitHubのように、誰もsshで入ってそのコードで作業することはなく、プルやプッシュなどだけ)は、基本的に作業コピーが存在しないので、HEADを持たないし持つべきでもないという印象を持っていました。そうではありませんか?
148
3
あなたは正しい、push to 専用リモートリポジトリは 'bare' つまり、作業ディレクトリがないときにずっとうまくいくのです。 Git's のアーキテクチャは、パッチまたは
pull
(fetch
) による更新のために設計されており、これは分散型 VCS では理にかなったものです。ドキュメントにあるように、現在チェックアウトされているブランチにプッシュすると、 "unexpected results" となる可能性があります。HEADは、有効なリポジトリの要件の一部です。Git Repository Layoutには、その一部が書かれています。
ですから、たとえ "it does not mean much... " であっても、ブランチリストの一部として HEAD を見ることになります。
リモートリポジトリの現在チェックアウトされているブランチ(masterかもしれないし、そうでないかもしれない)を**指し示すHEADが常に存在します。リモートリポジトリにさえ、現在のブランチがあります。通常それは master であり、私の頭の中ではそれを変更したい理由は思いつきませんが、変更することは可能です。
私の推測では、誰かがブランチをプッシュして、それをHEADと呼んだのではないでしょうか。