git でdetached HEAD となって、ブランチに対して操作できないとき

シェアする

こんばんは。

git で 編集して、さて、なにか作業しよっと思ったら、
detached HEAD だからできないというようなことを言われる事があります。

detached HEAD は、ブランチ(の最新コミット)に対して
チェックアウトしているのではなく、

特定のコミットをチェックアウトしている状態です。

ブランチ名でチェックアウト:

コミット名でチェックアウト:

たまたま、コミット名が、ブランチの最新コミットの時もありますが、
ブランチ名でチェックアウトしておらず、
ブランチの最新コミット(ハッシュ)でチェックしていれば、
ブランチでチェックアウトしている場合とは振る舞いが違います。

例えば、git pull をしても、
ブランチに属していないため、更新されることはありません。

コミット名でチェックアウトするメリット

例えば、ブランチでチェックアウトしていれば、
そこからコミットすると、ブランチが伸びますが、
最新コミットに対しコミットすると、
コミットだけが伸びます。

でも、最新の状態じゃなくて、過去の状態を使いたかったら、
コミット名でチェックアウトするしかないですよね。

もしそこから、コミットしてしまったら、
ブランチに属さない、迷子のコミットになってしまいますが、
そんなコミットどう使うかというと、

とすれば、そのコミットから新しいブランチが作れます。

あるブランチの途中のコミットから派生するブランチを作りたい場合は、
先にブランチ作ったほうが混乱がなく良いですが、
とりあえず、作業フォルダを、コミット名でチェックアウトしておいて、
いろいろ検討したついでに、変更・コミットしてしまったら、
それからでも、新しいブランチとして残すことができるのです。

ですね。

普通にブランチで作業したい場合は

作業フォルダをブランチに属させたいときは、

をすれば良いですね。

コミットをチェックアウトした状態から、
さらにコミットしてしまったなど、
間違えてしまったときの修正手段として、
新しいブランチを作るぐらいの使用にとどめておいたほうが良い
と思いますよ。

この記事が気に入ったら
いいね ! しよう