「gitのブランチ-r」を実行しているのに、なぜ「起源/ HEAD」が示されていますか?
-
21-08-2019 - |
質問
git branch -r
を実行すると、なぜブレーズは、それがorigin/HEAD
をリストしていますか?マスターと素晴らしい-機能:たとえば、GitHubの上のリモートレポあります、2つの支店を持つ、と言います。私はそれをつかむと、その後、私の新しいディレクトリに移動して、枝をリストするgit clone
をすれば、私はこれを参照してください。
$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature
または何ため、それは(アルファ?私は無実のレポ秘密のアイデンティティを維持するために、この例を偽造しています)になります。だから、HEAD
事業は何ですか?それは彼らのpush
を持っていたHEAD
する最後の人は、彼らが押されたときに指摘は何ですか?それは常に、それは彼らがpush
edたものは何でもではないでしょうか? HEAD
sは動き回る...なぜ私は誰かのHEAD
は、別のマシン上で指摘気にしますか?
私は、リモートの追跡などのハンドルを取得していますので、これは1つの長引く混乱です。ありがとう!
編集:私は(誰もでsshをしないと、そのコードで動作しますが、のみ、などを引っ張ったり、押しますGitHubのような)リモートリポジトリを捧げた印象の下にいなかったし、そこにあったのでHEADを持つべきではありません、基本的に、ノー作業コピー。そうではない?
解決
の @robinst の正しい
(クローンを作成するとき、すなわち)のgitでは、デフォルトでチェックアウトされたブランチを選択することができます。デフォルトでは、origin/HEAD
はその時に指します。
GitHubの上、あなたはのための管理者設定でこのに変更することができますあなたGitHubのレポ。また、
を経由して、コマンドラインからそれを行うことができますgit remote set-head origin trunk
または
を経て完全に削除git remote set-head origin -d
のrel="noreferrer">。 「スイッチ・支店」ドロップダウンを見てください。 trunk
がチェックされているので、origin/HEAD
はtrunk
に従います。
他のヒント
裸のリポジトリは、HEADを持つことができる理由は、それが決定するので、分岐が最初にリポジトリのクローン後にチェックアウトされているということです。
通常、マスターするHEADポイント、それは人々がリポジトリのクローンを作成する際にチェックアウトされたブランチです。そのブランチでの結果はクローンにチェックアウトされている(裸のリポジトリにHEADを編集して)別のブランチにそれを設定します。
私は印象の下にあったこと GitHubのような専用のリモートリポジトリ( 誰もでsshをしないと上で動作する場所 そのコードが、唯一のプルまたはプッシュ、など) HEADを持つべきではありませんしませんでした いいえ、基本的には、そこにあったので、 作業コピー。そうではない?
あなたが言ったように私はまったく同じ印象を持っています。
そして、私も実行してgithubのからクローン化され、その起源/ HEADのリモート追跡ブランチを削除することはできません。
git branch -d -r origin/HEAD
このは効果がありませんでした。
いくつかのいずれかが、私はその起源/ HEADのリモート追跡ブランチを削除する方法を教えてもらえます?
更新
githubのからクローンが、私はそれを削除する方法を見つけたとき、原点/ HEADが作成された理由を、私は見つかりませんでしたけど。
のgitの新しいバージョンが提供する
git remote set-head <name> -d
リモート追跡ブランチの無駄なヘッド・ポインタを削除します。
そして、我々はまた、我々は
を使って、好きにダムデフォルト名「起源」を変更することができますgit remote rename origin <new_name>
これが役立つことを願って。 :)
あなたしている右の
の専用リモートリポジトリは、彼らが「裸」のときより良い仕事に、彼らは作業ディレクトリを持っていないとき、それは、あるプッシュ。 Gitリポジトリのアーキテクチャは、分散VCSに理にかなっている、パッチやpull
(fetch
)で更新するために設計されています。ドキュメントはどこか言うように、現在チェックアウトされたブランチにプッシュしてのの「予期しない結果」につながることができます。
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を参照してくださいするつもりだ「それはあまり意味がありません...」
「起源」はリモートリポジトリである場合には、その後の原点/ HEADは、そのリモートリポジトリ上のデフォルトのブランチを識別します。
例:
$ git remote show
origin
$ git remote show origin
* remote origin
Fetch URL: git@github.com:walkerh/pipe-o-matic.git
Push URL: git@github.com: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ブランチ」という行に注意してください。リモートリポジトリは、クライアントは、デフォルトでチェックアウトしたブランチ知ることができます場所です。
(またはしないかもしれマスターでもよい)、リモートレポで現在チェックアウトされた分岐に にポイントをHEADが常にあります。でも、リモートリポジトリは、現在の枝を持っています。通常はマスターである、と私の頭の上から、私は1つがそれを変更する理由何らかの理由を考えることはできませんが、それを変更することができます。
私の推測では、誰かがブランチをプッシュして、HEAD、それを呼ばれるということです
git push origin HEAD