私の理解では、複製されたリポジトリのデフォルトのブランチは、複製されるレポジトリ内でHEADが指すものであれば何でもかまいません。
これは事実ではない場合があります。私の理解は明らかに欠陥があるので、(裸の)リポジトリをクローンするときにデフォルトのチェックアウトブランチを決定するものは何ですか?
そのレポでの最後のコミットは、ベアレポのHEADで参照されているブランチと、クローンのチェックアウトブランチとして取得しているブランチとの間のマージです。
ランニング git remote show Origin
は以下を返します。
Fetch URL: ...
Push URL: ...
HEAD branch (remote HEAD is ambiguous, may be one of the following):
<bad-branch>
live
Remote branches:
...
ベアリポジトリはGitバージョン1.8.2.1を使用し、クライアントは1.7.12.4を使用し、トランスポートはSSHです。
たぶん、答えは実際には こちら です。 この回答 確認します。すべてがHEADと同じリビジョンを指すシンボリック参照の選択肢がある場合、クライアントは使用するブランチをguessします。
Git 1.8.5 で始まるサーバーは、HEAD
が指す実際のブランチ名を「symref」機能で送信します。 Git 1.8.5より新しいクライアントとサーバーの両方がある場合、HEAD
correctlyが更新されます。
その前に、クライアントは、HEADが指すオブジェクトID(最終的に)をすべてのブランチのすべてのオブジェクトIDと比較することにより、HEADが指し示しているものを推測します。 refs/heads/master
という名前のブランチが優先されます。HEAD
とmaster
の両方が同じオブジェクトIDを指す場合、cloneは新しいリポジトリのデフォルトのブランチをmaster
に設定します。
それ以外の場合、一致するOIDを持つ最初のブランチ(ブランチがアルファベット順にソートされている場合)がデフォルトのブランチになります。一致するOIDを持つブランチがない場合、HEAD
はオブジェクトID(つまり、切り離されたHEAD)に直接設定されます。
実際にはHEADが指します。HEADの設定にはgit symbolic-ref HEAD refs/heads/mybranch
を使用します。(ソース: http://feeding.cloud.geek.nz/posts/setting- default-git-branch-in-bare / )
ベアリポジトリにはHEAD
もあります。それはあなたがそれをクローンするときに得るものです。
から - git clone
ドキュメント :
新しく作成されたディレクトリにリポジトリを複製し、複製されたリポジトリの各ブランチにリモート追跡ブランチを作成します(
git branch -r
)、クローンリポジトリの現在アクティブなブランチから分岐された初期ブランチを作成してチェックアウトします。
「現在アクティブなブランチ」に関するビットは、リモートのHEAD
リビジョンを参照しています。
別の動作が必要な場合は、--branch
または-b
:
--branch <name>
-b <name>
新しく作成されたHEAD
を、クローンリポジトリのHEAD
が指すブランチを指す代わりに、<name>
代わりにブランチ。非ベアリポジトリでは、これはチェックアウトされるブランチです。--branch
は、タグを取得し、結果のリポジトリのそのコミットでHEAD
を切り離すこともできます。