「master」と「testing」の2つのブランチを持つリモートのベアリポジトリがあります。HEADは「testing」を指します。このリポジトリのクローンを作成するとき、「master」と「testing」が同じリビジョンにある場合、gitは「master」をチェックアウトします(つまり、HEAD==テスト==マスター)。'testing'が1つ(または複数)のコミットの後ろまたは前にある場合にのみ、gitcloneはローカル側の'testing'ブランチをチェックアウトします。Mac OS X(10.6.8)のgit1.7.5でこれを試しました。
補遺:私は非ベアリポジトリで同じことを試しました:
mkdir A
cd A
git init
touch a
git add a
git commit -m "init repo A with a"
git checkout -b testing
ルートディレクトリに戻ります。
cd ..
git clone A B
cd B
git branch -v -a
* master 28f599b init A
remotes/origin/HEAD -> origin/master
remotes/origin/master 28f599b init A
remotes/origin/testing 28f599b init A
それは「マスター」です!レポAに戻ります(まだブランチ「テスト中」です):
cd ../A
touch b
git add b
git commit -m "add b in branch testing"
現在、「テスト」は「マスター」の1つ先のコミットです。次に、Aのクローンを作成しましょう。
cd ..
git clone A C
cd C
git branch -a -v
* testing 23bca39 add b in branch testing
remotes/origin/HEAD -> origin/testing
remotes/origin/master 28f599b init A
remotes/origin/testing 23bca39 add b in branch testing
Aに戻り、「master」をチェックアウトして「testing」とマージすることで、この奇妙な動作を再確認できます(すべてのブランチが同じヘッドを持つように)。これで、クローンAがDになり、Dがマスターでチェックアウトされます。