ブランチを作らずに特定のコミットを確認したい

過去のコミットの内容を一時的に確認したい場合、そのためだけにブランチを作るのは手間である。git switch--detachオプションを付けると、ブランチに紐付かないdetached HEAD状態で指定のコミットに切り替えられる。

$ git switch --detach HEAD~3
HEAD is now at 5569e0f 3 commits ago

git statusで確認すると、ブランチではなくコミットに直接HEADが向いている状態が分かる。

$ git status
HEAD detached at 5569e0f
nothing to commit, working tree clean

detached HEAD状態で作成したコミットは、いずれのブランチにも属さない孤立コミットとなる。別のブランチに切り替えると、その孤立コミットはgit logで辿れなくなるため注意が必要である。

-dオプションで短縮できる

--detach-dに短縮できる。

$ git switch -d HEAD~3

ブランチ名を指定した場合の挙動

--detachにブランチ名を渡すと、そのブランチを現在のブランチにするのではなく、ブランチの先端コミットにdetached HEADで切り替わる。

$ git switch --detach feature
Previous HEAD position was 5569e0f second
HEAD is now at 2bc6427 first
$ git status
HEAD detached at refs/heads/feature

コミットハッシュを直接指定した場合はHEAD detached at 5569e0fのようにハッシュ値が表示される。一方、ブランチ名を指定した場合はHEAD detached at refs/heads/featureのように参照元のブランチ名が表示される。どちらの経路でdetached HEAD状態になったのかを見分けられる。