トラブルシューティング

detached HEAD とは?焦らず対処する方法

detached HEAD の意味・原因・復帰方法と、コミットを救出する手順

detached HEAD とは?焦らず対処する方法 diagram

detached HEAD とは何か

通常、HEAD(ヘッド)はブランチを指しており、コミットすると HEAD が指すブランチが進みます。

detached HEAD(デタッチド・ヘッド)は、HEAD がブランチではなく特定のコミットを直接指している状態です。

データが壊れているわけではなく、単に「ブランチから外れている」だけです。

detached HEAD になる原因

  • コミットハッシュやタグを直接 checkout

    git checkout abc1234git checkout v1.0.0 のように特定の位置を指定すると detached HEAD になります。

  • リモートブランチを直接 checkout

    git checkout origin/main のようにリモート追跡ブランチを直接指定した場合も detached HEAD になります。

  • git bisect の実行中

    bisect は各コミットを順に detached HEAD でチェックアウトしながら検証します。

いずれも意図的に過去のコミットを確認する操作で起こるもので、異常ではありません。

ブランチに戻る方法

detached HEAD の状態から元のブランチに戻るには、git switch でブランチ名を指定します。

detached HEAD の状態で何も変更やコミットをしていなければ、これだけで解決です。

bash
# main ブランチに戻る
git switch main

# 直前にいたブランチに戻る
git switch -

detached HEAD でコミットしてしまった場合

  1. 現在位置に新しいブランチを作成

    git switch -c rescue-branch で detached HEAD の位置を指すブランチを作ります。これでコミットが孤立する心配がなくなります。

  2. 必要に応じて main などにマージ

    git switch main してから git merge rescue-branch を実行して統合します。不要なら rescue ブランチは後で削除しても構いません。

bash
# 現在の位置で新しいブランチを作成
git switch -c rescue-branch

# 必要に応じて main にマージ
git switch main
git merge rescue-branch

関連コマンド