このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

名前無しのHEADとcheckout

ワークツリーに紐付いたカレントコミットを指すカーソルがHEAD(実体は、.git/HEAD)だが、通常は、ref: refs/heads/master のような内容で、参照(.git/refs/の下に格納)を経由する。だが、直接オブジェクトIDが書いてあることもある。このとき、ヘッドはデタッチされた、というようだ。デタッチは、名前で参照可能なオブジェクト群からは切り離された、ということだろう。

名前がないコミットオブジェクトがHEADであっても特に問題はない。名前による参照はrefs/に入っている。ローカルブランチ(heads)とリモートブランチ(remotes/)とタグ(tags/)がある。

checkoutはワークツリーを破壊的に変更することがあるが、gitは上書きを阻止することを知っている。--force(-f)を付けない限りは上書きしないので安心。上書きから守るための退避にstash(スタック状の一時保存領域)が使える。