177

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編集したものではありませんか?HEAD動き回る... 誰かHEADが別のマシンで何を指し示しているかを気にするのはなぜですか?

私はリモート追跡などを処理しているところなので、これは長引く混乱の 1 つです。ありがとう!

編集: 専用のリモート リポジトリ (GitHub のように、誰も ssh に接続してそのコードで作業することはなく、プルまたはプッシュのみなど) には HEAD がなく、また、あるべきではないという印象を受けました。作業コピーはありません。そうじゃない?

4

7 に答える 7

156

@ロビンストは正しいです。

git では、デフォルトでチェックアウトするブランチを選択できます (つまり、クローンを作成するとき)。デフォルトでは、origin/HEADそれを指します。

GitHub では、GitHub リポジトリの管理者設定でこれを変更できます。コマンドラインからも実行できます

git remote set-head origin trunk

またはそれを完全に削除します

git remote set-head origin -d

。「Switch Branches」ドロップダウンを見てください。trunkがチェックされているので、以下のorigin/HEADとおりtrunkです。

于 2011-07-27T02:14:35.170 に答える
64

ベア リポジトリが HEAD を持つことができる理由は、リポジトリのクローン後にどのブランチが最初にチェックアウトされるかを決定するためです。

通常、HEAD は master を指し、これは人々がリポジトリをクローンするときにチェックアウトされるブランチです。(ベア リポジトリで HEAD を編集して) 別のブランチに設定すると、クローン時にそのブランチがチェックアウトされます。

于 2010-05-21T15:08:06.400 に答える
29

私は、専用のリモート リポジトリ (GitHub のように、誰も ssh に接続してそのコードで作業することはなく、プルまたはプッシュのみなど) には HEAD がなく、基本的に機能していないため、HEAD を持つべきではないという印象を受けました。コピー。そうじゃない?

おっしゃる通りの印象でした。

そして、github から複製された origin/HEAD リモート追跡ブランチを削除することさえできません。

git branch -d -r origin/HEAD

これは効果がありませんでした。

そのorigin/HEADリモート追跡ブランチを削除する方法を教えてもらえますか?

アップデート

github からクローンしたときに作成された origin/HEAD がある理由はわかりませんでしたが、それを削除する方法を見つけました。

git provide の新しいバージョン

git remote set-head <name> -d

リモート追跡ブランチの不要な HEAD ポインタを削除します。

また、ダムのデフォルト名 'origin' を任意の名前に変更することもできます。

git remote rename origin <new_name>

これが役立つことを願っています。:)

于 2009-07-30T10:14:46.923 に答える
13

専用のリモートリポジトリへのプッシュは、それらが「裸」である場合、つまり作業ディレクトリがない場合にはるかにうまく機能することは間違いありません。Git のアーキテクチャは、パッチまたはpull( fetch) による更新用に設計されており、分散型 VCS では意味があります。ドキュメントのどこかにあるように、現在チェックアウトされているブランチにプッシュすると、「予期しない結果」が発生する可能性があります。

HEAD は、有効なリポジトリの要件の一部です。Git Repository Layoutには、一部次のように書かれています。

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 が表示されます。

于 2008-12-10T18:27:42.277 に答える
6

「origin」がリモートリポジトリの場合、origin/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)

「HEADbranch:master」という行に注意してください。これは、リモートリポジトリがクライアントにデフォルトでチェックアウトするブランチを知らせる場所です。

于 2012-05-07T22:53:41.707 に答える
1

リモートリポジトリ (マスターである場合とそうでない場合があります) で現在チェックアウトされているブランチを指すHEAD が常に存在します。リモートリポジトリにも現在のブランチがあります。通常はマスターであり、頭のてっぺんから変更したい理由は思いつきませんが、変更することはできます。

于 2008-12-10T00:43:42.610 に答える
-14

私の推測では、誰かがブランチをプッシュして、それをHEADと呼んだと思います。

git push origin HEAD
于 2008-12-09T23:30:34.677 に答える