git branch -r
を実行すると、なぜ炎がOrigin/HEAD
をリストするのですか?たとえば、GitHubにはリモートリポジトリがあり、masterとawesome-featureという2つのブランチがあります。 git clone
を実行してそれを取得し、新しいディレクトリに移動してブランチを一覧表示すると、次のように表示されます。
$ git branch -r
Origin/HEAD
Origin/master
Origin/awesome-feature
または、それがどのような順序であろうと(アルファ?私は、この例を偽造して、無実のレポのアイデンティティを秘密にしています)。 HEAD
ビジネスとは何ですか? Push
の最後の人がプッシュしたときにHEAD
が指していたものですか?それは常に彼らがPush
edされたものではないでしょうか? HEAD
sが動き回る...誰かがHEAD
が他のマシンで何を指しているのか気にするのはなぜですか?
私はリモートトラッキングなどに取り組んでいるだけなので、これは長引く混乱です。ありがとう!
編集:私は専用のリモートリポジトリ(GitHubのように誰もそのコードをsshして作業しないが、プルやプッシュなどのみ)はしなかった、そしてHEAD基本的に作業コピーがなかったからです。
@ robinstは正しいです。
Gitでは、デフォルトでチェックアウトするブランチを選択できます(つまり、クローンを作成するとき)。デフォルトでは、Origin/HEAD
はそれを指します。
GitHubでは、GitHubリポジトリの管理設定で これを変更できます 。コマンドラインから次の方法でも実行できます
git remote set-head Origin trunk
または経由で完全に削除します
git remote set-head Origin -d
例 。 [ブランチの切り替え]ドロップダウンを見てください。 trunk
がチェックされているため、Origin/HEAD
がtrunk
に続きます。
裸のリポジトリがHEADを持つことができる理由は、リポジトリのクローンの後に最初にチェックアウトされるブランチを決定するためです。
通常、HEADはマスターを指します。これは、リポジトリを複製するときにチェックアウトされるブランチです。別のブランチに設定する(HEAD inベアリポジトリ)は、そのブランチがクローンでチェックアウトされる結果になります。
私は、専用のリモートリポジトリ(GitHubのように、誰もそのコードをsshして操作せず、プルやプッシュなどのみを行う)は、HEAD =基本的に作業コピーがなかったため。
あなたが言ったように、私はまったく同じ印象を持っていました。
そして、私はgithubからクローンされたOrigin/HEADリモート追跡ブランチを削除することもできません
git branch -d -r Origin/HEAD
これは効果がありませんでした。
Origin/HEADリモート追跡ブランチを削除する方法を教えてください。
Githubからクローンを作成したときにOrigin/HEADが作成された理由を見つけられませんでしたが、削除する方法を見つけました。
Gitの新しいバージョンは
git remote set-head <name> -d
無駄なHEADリモート追跡ブランチのポインターを削除する。
そして、以下を使用して、ダムのデフォルト名「Origin」を必要なものに変更することもできます
git remote rename Origin <new_name>
これが役立つことを願っています。 :)
確かに、プッシュ専用のリモートリポジトリは、「裸」の場合、つまり作業ディレクトリがない場合にはるかに機能します。 Gitのアーキテクチャは、パッチまたはpull
(fetch
)による更新用に設計されており、分散VCSで意味があります。ドキュメントがどこかで言っているように、現在チェックアウトされているブランチにプッシュすると、「予期しない結果」になります。
HEADは有効なリポジトリの要件の一部です。 Gitリポジトリレイアウト の一部は次のとおりです。
HEAD
A symref (see glossary) to the refs/heads/ namespace describing the currently active
branch. It does not mean much if the repository is not associated with any working tree
(i.e. a bare repository), but a valid git repository must have the HEAD file; some
porcelains may use it to guess the designated "default" branch of the repository
(usually master). It is legal if the named branch name does not (yet) exist.
だから、たとえそれが「あまり意味がない...」であっても、ブランチリストの一部としてHEADを見るでしょう
「Origin」がリモートリポジトリの場合、Origin/HEADはそのリモートリポジトリのデフォルトのブランチを識別します。
例:
$ git remote show
Origin
$ git remote show Origin
* remote Origin
Fetch URL: [email protected]:walkerh/pipe-o-matic.git
Push URL: [email protected]:walkerh/pipe-o-matic.git
HEAD branch: master
Remote branch:
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git Push':
master pushes to master (fast-forwardable)
「HEAD branch:master」という行に注意してください。これは、リモートリポジトリがクライアントにデフォルトでチェックアウトするブランチを知らせる場所です。
HEAD that pointsは、リモートリポジトリ上の現在チェックアウトされたブランチ(マスターである場合もそうでない場合もあります)に常に存在します。リモートリポジトリでさえ現在のブランチがあります。それはマスターであり、私の頭の上では、なぜそれを変更したいのかという理由は考えられませんが、変更することはできます。