Pernah git reset --hard salah branch dan panik? Tenang — reflog adalah jaring pengaman lokal Git.
Apa itu reflog?
Setiap kali HEAD bergerak (commit, checkout, reset, merge, rebase), Git mencatat posisi sebelumnya di reference log lokal. Commit yang "hilang" dari git log masih ada di reflog — dan di .git/objects/ — selama 90 hari (default).
$ git reflog
abc1234 HEAD@{0}: reset: moving to HEAD~3
def5678 HEAD@{1}: commit: fitur penting
9876abc HEAD@{2}: checkout: moving from fitur to main
...
Skenario penyelamatan:
1. Recover dari git reset --hard yang salah:
$ git reflog # cari posisi sebelum reset
$ git reset --hard HEAD@{1} # kembali ke sana
2. Recover branch yang di-delete:
$ git reflog # cari hash commit terakhir branch itu
$ git branch fitur-rescue abc1234
3. Recover dari force push:
$ git reflog # commit lama masih ada di reflog lokal
$ git push --force-with-lease origin abc1234:main
git fsck --lost-found:
Jika reflog juga tidak cukup (commit dihapus dari reflog, atau clone baru), cari dangling objects:
$ git fsck --lost-found
dangling commit 7f2e9a...
Kapan reflog tidak bisa menyelamatkan:
- Clone baru dari remote — reflog lokal, tidak ikut
clone - Commit lebih dari 90 hari (default
gc.reflogExpire) dan GC sudah jalan git reflog expire --expire=now --all && git gc --prune=now(hati-hati, ini menghapus)
Aturan emas: sebelum perintah destruktif (
reset --hard,rebase,filter-branch), catat mentalHEAD@{0}dulu. Reflog menyelamatkan, tapi jangan bergantung padanya untuk backup serius — gunakangit pushatau tag.