主に技術的なことを書くブログ

浅めにマークアップ&フロントエンドの技術的なことをメモしていましたが、ざっくばらんに書いています。

デタッチド・イン・マイ・ヘッド状態

なるべくGit慣れしようとSourceTreeでいろいろやっていたときに、いまいちHEAD、とかmastarとか、ブランチを切るとか、チェックアウト、の意味をよくわかってなくて、それでもまぁ、一方向で作る分には知らなくても使えてたのですが。

ちょっと調子のってブランチでも切ってみようかな、とこねくり回していたら、下記のような状態になってしまって。あれ、なんかHEADの方が最新だし、こっちをmasterにしたいとおもって、何も考えずにmasterブランチのコミットログをダブルクリック(後から調べたらチェックアウトしてることになる)したらHEADラベルのコミットが消えてしまうという事故がおこりました。

f:id:nakagaw:20141012234917p:plain

Gitの先輩に質問したら、SourceTreeあんま知らんのでターミナルでしか教えられないけど、と少しイキった様子で、「こいつはデタッチドヘッドという状態ですわ」と、ちょっとかっこいい名前の状態を指摘され、調査した結果、まさにデタッチドヘッド状態でした。

参考:"detached HEAD状態から元に戻すコマンド (git, checkout, fix a detached HEAD, .git/HEAD, refs/heads/master) - いろいろ備忘録日記

たぶんmastarとは別のブランチにいるときに、いくつか前のコミットに戻して、それがHEADの状態でチェックアウトしたんじゃないか、と推測されたのですが、ほぼそんな感じでした。

まだよくわかってないですが、とりあえず、仕事じゃなくてよかったと思う。

今日の時点の理解

  • masterブランチはローカルリポジトリ(自分だけのもの)
  • origin/masterブランチはリモートリポジトリ(共有されてるもの)
  • なるだけ作業用ブランチを作成してそっちで作業する
  • チェックアウトはブランチの乗り換えのようなもの(電車に例えると)
  • コミットすることでブランチという電車が発車
  • マージすると、枝分かれが一本になる
  • そしてデタッチドヘッド状態になってしまったらもうもう戻らない

参考:"Git入門(SourceTree の使い方) | セルティスラボ