detached HEAD | ブランチから外れる (★★)
難易度 :star: :star:
:bulb: "detached HEAD"はgitコマンドではありません、練習問題にてdetached HEADを再現するための手順を学習しましょう
概要

ブランチから外れた場合に "You are in 'detached HEAD' state." というメッセージが表示される
新規にブランチを作成するか適当なブランチをcheckoutすることでdetached HEAD状態を回避 = attached HEAD状態に戻ること出来る
gitにおけるbranchとは「commitを指すポインタ」
HEADとは現在自分が見ているcommitまたはbranchを指す「ポインタ」
つまり "detached HEAD" 状態とは「HEADがbranchを指してない状態 = 単独のコミットを指している」状態を指す
例題 (リポジトリ: git-drill/detached-head)
:mag: このリポジトリではある日の業務日報が記された
report.txtが管理されています。:mag: また3つのブランチが存在します。
master(= checkout直後のブランチ)good-day(良いことがあった日に書かれた日報)bad-day(悪いことがあった日に書かれた日報)
:octocat: 各ブランチをcheckoutしたときに
detached HEAD状態にならないことを確めてください。:octocat:
good-dayブランチをcheckoutした後に以下のコマンドを順に実行することで、detached HEAD状態になった後detached HEAD状態ではなくなることを確かめてください。またその時の状態をページ先頭にあるような図で説明してみましょう。git checkout HEAD~1git statusgit checkout good-day
:octocat:
bad-dayブランチをcheckoutした後に以下のコマンドを順に実行することで、detached HEAD状態になった後detached HEAD状態ではなくなることを確かめてください。またその時の状態をページ先頭にあるような図で説明してみましょう。git checkout HEAD~2git statusgit checkout -b soso-day
例題回答(No.3)
git checkout good-dayを実行し以下の表示が出ることを確認。続けて
git statusを実行し、 detached HEADのメッセージが表示されないことを確認。上記 1. と 2. の手順を
bad-dayとmasterに対しても実行し表示を確認
例題解説(No.3)
この例題で行った処理はすべて既存のブランチをcheckout作業する作業です。 したがってHEAD(自分が今見ている対象)はブランチのみのためdetached HEAD状態にはなりません。
例題回答(No.4)
git checkout good-daygit checkout HEAD~1で "You are in 'detached HEAD' state."の表示が出ることを確認。```
Note: checking out 'HEAD~1'.
You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example:
git checkout -b
HEAD is now at 72ce929 良い日の昼の出来事を追記
HEAD detached at 72ce929 nothing to commit, working tree clean
Previous HEAD position was 72ce929 良い日の昼の出来事を追記 Switched to branch 'good-day'
Note: checking out 'HEAD~2'.
You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example:
git checkout -b
HEAD is now at 662c712 悪い日の朝の出来事を追記
HEAD detached at 662c712 nothing to commit, working tree cleau
Switched to a new branch 'soso-day'
```
状態のイメージ図は下の解説にて
例題解説(No.5)
参考リンク
Last updated