名前無しのHEADとcheckout
ワークツリーに紐付いたカレントコミットを指すカーソルがHEAD(実体は、.git/HEAD)だが、通常は、ref: refs/heads/master のような内容で、参照(.git/refs/の下に格納)を経由する。だが、直接オブジェクトIDが書いてあることもある。このとき、ヘッドはデタッチされた、というようだ。デタッチは、名前で参照可能なオブジェクト群からは切り離された、ということだろう。
名前がないコミットオブジェクトがHEADであっても特に問題はない。名前による参照はrefs/に入っている。ローカルブランチ(heads)とリモートブランチ(remotes/)とタグ(tags/)がある。
checkoutはワークツリーを破壊的に変更することがあるが、gitは上書きを阻止することを知っている。--force(-f)を付けない限りは上書きしないので安心。上書きから守るための退避にstash(スタック状の一時保存領域)が使える。