Git

【図解】 Gitの警告文 detached HEADH状態とは?

マナビト
マナビト
こんにちはマナビトです。
普段はフロントエンドエンジニアとしてJavaScript/TypeScript/Aangular/GraphQLを
メインに開発業務を行なっています。

今回はGitで「You are in 'detached HEAD state'」と警告文が出された時の対処法について記載していきたいと思います。

目次
  1. Gitのdetached HEAD状態
  2. detached HEAD状態だと何がダメなのか?
  3. detached HEAD状態を抜け出すには?

1. Gitのdetached HEAD状態

先日branchをチェックアウトしていると、Gitから上記の通り怒られてしまいました。

どうやら、detached HEAD状態だとコミットした作業が全て消えてしまうので、ブランチを作ってコミットしてくださいねという警告文のようです。

detached HEAD状態だと何がダメなのか?

detached HEAD状態とはブランチがない状態、さらにいうとHEAD自体がコミットIDを直接指している状態のことを指します。

Gitでコミットを実行すると、Git はステージングされたファイルから、新しいコミットオブジェクトを作り、最新のコミットを設定します。

ブランチで作業してコミットした場合、そのブランチが指しているのはデータの内容ではなく、コミットしたIDのみということになります。さらにブランチを指しているのがHEADです。

上記図のように、HEADがブランチを通じてコミットIDを指定することが正常な状態です。

もしブランチがない状態で作業を続けてしまうと、別のブランチにチェックアウトした場合、detached HEAD状態でコミットした内容が消えてしまいます。

今まで苦労して作業した内容が消えてしまうので、detached HEADはとても危険な状態であることが分かります。

detached HEAD状態を抜け出すには?

detached HEAD状態を抜け出すには、現在チェックアウトしている場所に新たにブランチをきればその状態を抜け出すことができます。

git checkout 作成したいブランチ名

HEADがbranchを介してコミットIDを指定する状態にすれば良いというわけですね。

本日はここまでとなります。最後まで読んでいただきありがとうございました。