こんばんは。
git で 編集して、さて、なにか作業しよっと思ったら、
detached HEAD だからできないというようなことを言われる事があります。
detached HEAD は、ブランチ(の最新コミット)に対して
チェックアウトしているのではなく、
特定のコミットをチェックアウトしている状態です。
ブランチ名でチェックアウト:
1 |
git checkout <ブランチ名(masterなど)> |
コミット名でチェックアウト:
1 |
git checkout <コミット名(e3a1160など)> |
たまたま、コミット名が、ブランチの最新コミットの時もありますが、
ブランチ名でチェックアウトしておらず、
ブランチの最新コミット(ハッシュ)でチェックしていれば、
ブランチでチェックアウトしている場合とは振る舞いが違います。
例えば、git pull をしても、
ブランチに属していないため、更新されることはありません。
コミット名でチェックアウトするメリット
例えば、ブランチでチェックアウトしていれば、
そこからコミットすると、ブランチが伸びますが、
最新コミットに対しコミットすると、
コミットだけが伸びます。
でも、最新の状態じゃなくて、過去の状態を使いたかったら、
コミット名でチェックアウトするしかないですよね。
もしそこから、コミットしてしまったら、
ブランチに属さない、迷子のコミットになってしまいますが、
そんなコミットどう使うかというと、
1 |
git branch <新しいブランチ名> <コミット名(e3a1160など)> |
とすれば、そのコミットから新しいブランチが作れます。
あるブランチの途中のコミットから派生するブランチを作りたい場合は、
先にブランチ作ったほうが混乱がなく良いですが、
とりあえず、作業フォルダを、コミット名でチェックアウトしておいて、
いろいろ検討したついでに、変更・コミットしてしまったら、
それからでも、新しいブランチとして残すことができるのです。
1 |
git branch <新しいブランチ名> <コミット名(e3a1160など)> |
ですね。
普通にブランチで作業したい場合は
作業フォルダをブランチに属させたいときは、
1 |
git checkout <ブランチ名(masterなど)> |
をすれば良いですね。
コミットをチェックアウトした状態から、
さらにコミットしてしまったなど、
間違えてしまったときの修正手段として、
新しいブランチを作るぐらいの使用にとどめておいたほうが良い
と思いますよ。
コメント