Git Reflogで失われたコミットを回復する
git reflogを使用して、ハードリセット、失敗したリベース、誤ったブランチ削除後に失われたコミットを回復する方法を学びます。Gitの災害時のセーフティネット。
Undoing Changes
詳細な説明
Git Reflogで失われたコミットを回復する
git reflogは究極のセーフティネットです。コミット、リセット、リベース、ブランチ切り替えなど、HEADへのすべての変更を記録します。git reset --hardの後でも、reflogは失われた作業の回復に役立ちます。
Reflogとは何か?
reflog(参照ログ)はHEADが指していた場所のローカル専用ログです。コミットの祖先関係を表示するgit logとは異なり、git reflogはHEADを移動したすべての操作を表示します。
git reflog
出力例:
abc1234 HEAD@{0}: reset: moving to HEAD~1
def5678 HEAD@{1}: commit: feat: add user auth
ghi9012 HEAD@{2}: commit: fix: resolve login bug
ハードリセット後の回復
# 誤ってハードリセットしてしまった
git reset --hard HEAD~3
# reflogで失われたコミットを確認
git reflog
# 見つけた!復元する:
git reset --hard def5678
# または失われたコミットから新しいブランチを作成
git branch recovery def5678
Reflogの有効期限
reflogエントリはデフォルトで90日後に期限切れになります(到達不能なコミットは30日)。
重要な注意事項
- reflogはローカル専用 -- リモートにプッシュされません
git gc(ガベージコレクション)は古いreflogエントリを削除する場合があります- 各ブランチには独自のreflogがあります:
git reflog show main
ユースケース
Git reflogはGitの災害からの回復の最後の手段です。誤ってgit reset --hardを実行した場合、リベースに失敗した場合、または重要なブランチを削除した場合でも、reflogはHEADがあった場所の記録を保持します。ミスが起こりやすい高速な開発において特に価値があります。reflogを理解することで、開発者はセーフティネットがあることを知り、強力な(そして潜在的に破壊的な)Gitコマンドを自信を持って使用できます。