tutorial, git,

Git Reflog: Cara Mengembalikan Commit yang Terhapus

Kiki/🎮🍉⌨️🍩💻 Kiki/🎮🍉⌨️🍩💻 Sep 28, 2026 · 5 mins read
Git Reflog: Cara Mengembalikan Commit yang Terhapus
Share this

Pernahkah kamu secara tidak sengaja menghapus commit penting, atau reset branch ke commit yang salah, dan merasa semua perubahan hilang selamanya? Jangan panik — Git Reflog adalah fitur救命 (kyūmei / penyelamat) yang jarang dikenal tapi sangat powerful untuk recovery.

Git menyimpan histori lengkap setiap perubahan HEAD, termasuk commit yang sudah di-reset, di-rebase, atau bahkan di-force push. Dengan git reflog, kamu bisa “kembali ke masa lalu” dan mengembalikan commit yang hilang.


Apa itu Git Reflog?

Reflog (reference log) adalah log lokal yang merekam setiap perubahan HEAD di repository. Setiap kali kamu checkout, commit, reset, rebase, atau merge, Git mencatatnya di reflog.

Perbedaan dengan git log:

  • git log: Menampilkan histori commit di branch aktif
  • git reflog: Menampilkan histori gerakan HEAD, termasuk commit yang sudah “terhapus”

Reflog bersifat lokal dan temporary (default 90 hari), jadi tidak akan ter-push ke remote.


Cara Melihat Reflog

git reflog

Output contoh:

f4e3c21 HEAD@{0}: commit: Fix bug di halaman login
a1b2c3d HEAD@{1}: reset: moving to HEAD~1
d9e8f7g HEAD@{2}: commit: Add validasi form
c6b5a4f HEAD@{3}: checkout: moving from feature to main
...

Penjelasan:

  • HEAD@{0}: Posisi HEAD saat ini
  • HEAD@{1}: Posisi sebelumnya (1 langkah ke belakang)
  • HEAD@{2}: 2 langkah ke belakang, dan seterusnya

Melihat reflog branch tertentu:

git reflog show main

Scenario 1: Mengembalikan Commit yang Di-reset

Kasus: Kamu melakukan git reset --hard HEAD~2 dan ingin mengembalikan 2 commit yang terhapus.

Langkah Recovery:

1. Lihat reflog untuk mencari commit yang hilang:

git reflog

Output:

a1b2c3d HEAD@{0}: reset: moving to HEAD~2
d9e8f7g HEAD@{1}: commit: Add feature X
e5f6g7h HEAD@{2}: commit: Fix typo

2. Kembali ke commit sebelum reset:

git reset --hard HEAD@{1}
# atau
git reset --hard d9e8f7g

3. Verifikasi:

git log --oneline

Commit yang terhapus kembali muncul!


Scenario 2: Mengembalikan Branch yang Dihapus

Kasus: Kamu menghapus branch dengan git branch -D feature-x dan baru sadar branch itu masih dibutuhkan.

Langkah Recovery:

1. Cari commit terakhir dari branch yang dihapus:

git reflog | grep feature-x

Output:

c6b5a4f HEAD@{5}: checkout: moving from feature-x to main
a9b8c7d HEAD@{6}: commit: Implement feature X

2. Buat ulang branch dari commit terakhir:

git checkout -b feature-x a9b8c7d

Branch feature-x berhasil di-restore dengan semua commit-nya!


Scenario 3: Mengembalikan Commit Setelah Rebase

Kasus: Rebase berjalan, tapi hasilnya berantakan. Kamu ingin membatalkannya.

Langkah Recovery:

1. Lihat reflog untuk mencari state sebelum rebase:

git reflog

Output:

f4e3c21 HEAD@{0}: rebase finished: refs/heads/feature
a1b2c3d HEAD@{1}: rebase: Add feature Y
d9e8f7g HEAD@{10}: checkout: moving from feature to main

2. Kembali ke state sebelum rebase:

git reset --hard HEAD@{10}

Rebase dibatalkan, branch kembali ke kondisi awal!


Scenario 4: Mengembalikan Commit yang Di-amend

Kasus: Kamu melakukan git commit --amend dan menimpa commit lama, tapi ternyata commit lama masih dibutuhkan.

Langkah Recovery:

1. Lihat reflog:

git reflog

Output:

f4e3c21 HEAD@{0}: commit (amend): Fix typo in README
e5f6g7h HEAD@{1}: commit: Add README

2. Checkout commit sebelum amend:

git checkout e5f6g7h

3. (Opsional) Buat branch baru dari commit lama:

git checkout -b backup-readme e5f6g7h

Melihat Diff Antar Posisi Reflog

Bandingkan perubahan antara dua posisi HEAD:

git diff HEAD@{1} HEAD@{0}

Lihat file apa saja yang berubah:

git diff --name-only HEAD@{2} HEAD@{0}

Membersihkan Reflog

Reflog secara default akan expire dalam 90 hari. Tapi jika ingin manual cleanup:

Hapus reflog entries yang lebih tua dari 30 hari:

git reflog expire --expire=30.days --all

Hapus reflog entries yang unreachable:

git reflog expire --expire-unreachable=now --all
git gc --prune=now

⚠️ Hati-hati: Setelah di-prune, commit yang unreachable tidak bisa di-recovery lagi.


Tips Menggunakan Reflog dengan Aman

✅ Selalu cek reflog sebelum reset:

git reflog
git reset --hard HEAD@{n}

✅ Gunakan --no-ff saat merge untuk memperjelas reflog:

git merge --no-ff feature

✅ Buat backup branch sebelum operasi berbahaya:

git branch backup-main
git rebase main

✅ Jangan andalkan reflog di remote: Reflog bersifat lokal dan tidak ter-push.


Kesimpulan

Git Reflog adalah safety net yang harus diketahui setiap developer. Dengan reflog, kamu bisa:

  • Mengembalikan commit yang terhapus setelah reset
  • Restore branch yang sudah dihapus
  • Membatalkan rebase atau merge yang salah
  • Recovery dari commit amend yang tidak disengaja

Key Takeaway:

  • Reflog mencatat semua gerakan HEAD
  • Gunakan git reflog untuk melihat histori
  • Gunakan git reset --hard HEAD@{n} untuk kembali ke posisi tertentu
  • Reflog bersifat lokal dan expire dalam 90 hari

Di artikel berikutnya, kita akan membahas Git Submodules dan Subtree untuk mengelola dependency antar repository. Stay tuned!

Kiki/🎮🍉⌨️🍩💻
Written by Kiki/🎮🍉⌨️🍩💻
hello I'm friend K.