Webサービスやアプリ開発の現場では必須のバージョン管理システム「Git(ギット)」。Gitは、専用のソフトを使えばクリックで直感的に操作することもできますが、いざというときにコマンドが使えると便利です。
前回の第18話では、コミットにタグをつける「git tag」を学びました。
・タグをつける
・タグを共有する
今回の第19話では、detached HEAD 状態になってしまった場合の解決方法を学びます。このマンガを通して、わかばちゃんと一緒にGitの知識を身につけていきましょう!
detached HEAD = ブランチがない状態!
detached HEADになってはダメ!でもなんで?
会社の先輩に「Gitを使うときは、detached HEAD にならないようにしてね」と注意されてしまった……!そのときこんな疑問が浮かびませんでしたか?
「どういう段階を踏んだら detached HEAD になるの?」
そもそも detached HEAD が何なのかわからない状態で「ダメだよ」とだけ言われても、また気づかないうちに detached HEAD にしてしまうかもしれないですよね。
この記事では detached HEAD を深く理解するために
・なぜdetached HEADがダメなのか?
・detached HEAD 状態を解消する方法
について、順に解説します。
そもそもdetached HEADとは何か?
detached HEADとは「ブランチがない状態」です。もう少し詳しく言うと「HEAD がコミットIDを直接指し示している状態」です。
第2話 ブランチとは?ポインタってどういう意味? で学んだとおり、実はブランチはコミットIDを指し示しているだけなんです。
そして、ブランチをさらに指差しているのが「HEAD」です。わかりやすく言うと、HEADは「現在地」です。今自分がチェックアウトしている場所を示します。
HEADはいつもひとつです。複数存在することはありません。そして、HEADはブランチを通してコミットIDを指し示しているのが正常な状態です。
対して、detached HEADな状態は次のようになります。
HEADがブランチではなく、コミットIDを直接指し示してしまっています。これは危険な状態です。
なぜ detached HEAD はダメなのか?
detached HEAD 状態を解消する方法
detached HEAD 状態を抜け出すには、そのまま、今チェックアウトしているコミット上でブランチを作ります。
こうすることで、ポインタが
という正常な状態に戻り、detached HEAD 状態を抜け出せます!
まとめ
今回は、detached HEAD について学びました。
ブランチがない状態のこと。もっと詳しく言うと、HEADがコミットIDを直接指し示してしまっている状態のこと。
そのままコミットを積み上げることもできるが、別のブランチにチェックアウトした瞬間、積み上げたコミットをたどれなくなるため。なぜならブランチがないから。
そのまま、今チェックアウトしているコミット上でブランチを作る。
このように detached HEAD は、ちゃんと理解すれば恐れることのない現象です。ブランチがない状態ならブランチがある状態にすればいいのです。これで、detached HEAD 状態になっても慌てず対処できますね。
『マンガでわかるGit ~コマンド編~』はこれにて最終回となります。 次回作のテーマは機械学習です。お楽しみに!
▼わかばちゃんが登場する書籍
▼ これまでの「マンガでわかるGit」
第2話「ブランチの概念」
第3話「マージの仕組み」
第4話「コンフリクトの修正」
第5話「git revert」
第6話「git reset 3種類」
第7話「git reflog」
第8話「git switchとgit restore」
第9話「git diff」
第10話「git cherry-pick」
第11話「git stash」
第12話「git grep」
第13話「git blame」
第14話「git remote」
第15話「.gitconfig でコマンドを短縮」
第16話「.gitconfig と .git/config で複数のGitアカウントを使い分ける」
第17話「prune オプション」
第18話「git tag」
第19話「detached HEAD 状態って何?」