git reflog
別名: reflog / 参照ログ
HEAD やブランチ参照が指していた位置の移動履歴をローカルに記録する Git の仕組み。reset や rebase で消えたコミットも、GC 前なら reflog の SHA から復旧できる。
#git#reflog#recovery#reset#head
定義
git reflog は、HEAD や各ブランチ参照が いつどこを指していたか の移動履歴をローカルに記録する仕組み。git reflog で HEAD@{0} HEAD@{1} … と過去位置が SHA 付きで一覧できる。
commit / reset / rebase / checkout など参照を動かす操作のたびに 1 エントリ追加される。
詳細
git reset --hard や rebase でコミットが履歴から外れても、そのコミット自体は即座には消えない。
reflog に SHA が残っている限り git branch <name> <sha> や git reset --hard <sha> で復旧できる。
reflog はローカル専用で、clone や push では共有されない。
到達不能になったエントリは gc(既定でおよそ 90 日)で最終的に整理される。
よくある誤解
- reflog はリモートにもある: ない。
手元のリポジトリだけの記録で、push しても相手には渡らない。 - 永久に残る: gc の対象になり、一定期間後に消える。
関連
reset と revert を取り違えたときの救済は コミットを取り消せない、ブランチ外コミットの回収は detached HEAD から戻れない を参照。