質問: よく「HEADとは現在のブランチの最新のコミットです」のような説明がなされますが、`git checkout HEAD^`とすると、HEADは「現在のブランチの最新のコミット」を指さなくなりますよね。 そもそも、Gitでは、ブランチはあるコミットへのポインターですよね。であれば、ブランチが指すのは1つのコミットでありますから、「ブランチの最新のコミット」という表現はナンセンスですよね。 GitのHEADとは、本当は何なのでしょうか?
回答: HEAD はシンボリックリファレンス(symbolic reference)です。現在チェックアウトされているブランチ(reference)、またはコミットIDを参照します。 ブランチ(reference)はコミットIDを参照するのに対して、シンボリックリファレンスはブランチまたはコミットIDを参照します。 あ、bare なリモートリポジトリの HEAD もシンボリックリファレンスであることは変わりないですが、意味合いが少し違います。 bare なリモートリポジトリの場合、HEAD は clone したときにデフォでチェックアウトされるブランチになります。 つまり、リモートリポジトリの HEAD が hoge だった場合、普通に clone すると hoge がチェックアウトされます。