Gitを使ってて、「あれ?コミットしたはずの変更がどっか行っちゃった…?」って焦ったことない?わたしはつい最近やらかして、ちょっとしたパニックになったんだよね😳
「detached HEAD」って何?わたしのやらかし体験
ある日、過去のコミットを試したくて、git checkoutで古い状態に戻ったの。そしたら「detached HEAD」っていう状態になってて、なんかいつものブランチじゃなくなってたみたいで💭
ここで気づかずに変更を加えてコミットもしたんだけど、そのあと元のブランチに戻ったら…
「あれ?さっきのコミットどこいった?」状態に😱
これ、実はdetached HEAD状態で作ったコミットは普通のブランチには紐づかないから、切り替えた瞬間に見えなくなっちゃうのよね💦
でも大丈夫!git reflogって知ってる?
ここで救世主登場✨
git reflogってコマンド、めちゃくちゃ地味だけどあなたのGit操作履歴を全部記録してくれてるんだよね🔥
たとえ「消えた」コミットでも、reflogはその動きをちゃんと追っかけてるから復活させられる可能性大なの!
どうやって復活させるの?
- ターミナルで
git reflogを実行すると、最近のHEADの動きがズラーっと出てくるよ👀 - 消えちゃったコミットのハッシュ(ID)を探す
git checkout ハッシュでその状態に戻れる- もしブランチに戻したいなら、
git branch ブランチ名で新しいブランチ作ればOK
こうやって「見えなくなった」コミットを再び救い出せるってわけ✨
まとめ
Gitって便利だけど、わかんないうちはちょっと怖いところもあるよね💭
でもこういう「隠れ機能」があって、うっかりミスもカバーできるって知ってると気持ちがずっと楽になるよ👍
もし同じようにコミットが消えちゃった時は、まずgit reflogを思い出してみてね🌸
💡詳しい復旧手順は、こちらのリンクも参考にしてみて👇
detached stateとreflogでの復旧方法
コメント
クリス
`git log --graph --oneline --reflog`の方が`git reflog`よりずっとわかりやすいよ。
ハンナ
この人、/r/gitで自分のMediumブログばっか宣伝してるね。
エイダン
https://ohshitgit.com/(そのまま)
リリー
reflogは何度も助けられたよ。 ただ定期的なgit gcには注意、これが木から外れたコミットを消しちゃうから。
ハンナ
これ、まるで呪術の宣伝みたいだね。 Gitの問題は枝(branch)を重視しすぎなこと。 実際はコミットこそが作業単位なのに、「一時的なコミット」なんて話は変だよ。
ノーラン
最初のムチ打ちで効かなかった時用。
ワット
そうだね、でもゴミ収集が来るまでの話だけどね。








