Kesimpulan yang paling menenangkan dari seluruh modul pembatalan adalah bahwa Git hampir tidak pernah menghapus sesuatu secara diam-diam, dan buktinya adalah reflog. Reflog mencatat setiap pergerakan HEAD pada repository lokal, termasuk commit, berpindah branch, reset, dan amend, sehingga commit yang terasa hilang tetap dapat ditemukan dan dikembalikan. Topik ini membahas cara membaca reflog dan dua pola pemulihan yang paling sering menyelamatkan pekerjaan.
Apa yang dicatat reflog#
Reflog adalah catatan pribadi milik repository lokal, dan isinya adalah baris-baris peristiwa: setiap kali HEAD berpindah, Git menambahkan baris berisi hash hasil perpindahan dan keterangannya. Catatan ini tidak pernah dikirim ke remote dan tidak ikut tersalin saat clone, karena tujuannya memulihkan kesalahan pada repository itu sendiri, bukan menyimpan sejarah penuh.
Buat riwayat yang sengaja dirusak dengan git reset --hard, lalu amati jejaknya.
# tanggal commit ditetapkan agar keluaran contoh dapat direproduksi secara persis
export GIT_AUTHOR_DATE="2026-11-01T09:00:00+07:00"
export GIT_COMMITTER_DATE="2026-11-01T09:00:00+07:00"rm -rf /tmp/lab-reflog
mkdir /tmp/lab-reflog
cd /tmp/lab-reflog
git init -b main
git config user.name "Budi"
git config user.email "[email protected]"
printf "Satu.\n" > berkas.txt
git add berkas.txt
git commit -m "Satu"
printf "Satu.\nDua.\n" > berkas.txt
git commit -am "Dua"
printf "Satu.\nDua.\nTiga.\n" > berkas.txt
git commit -am "Tiga"
git reset --hard HEAD~2
git log --onelineInitialized empty Git repository in /tmp/lab-reflog/.git/
[main (root-commit) 04068da] Satu
1 file changed, 1 insertion(+)
create mode 100644 berkas.txt
[main 83d9ee7] Dua
1 file changed, 1 insertion(+)
[main 968dadf] Tiga
1 file changed, 1 insertion(+)
HEAD is now at 04068da Satu
04068da SatuDari sisi git log, dua commit terakhir sudah tidak terlihat sama sekali, karena log menelusuri rantai parent dari commit yang ditunjuk branch. Keadaan inilah yang terasa seperti kehilangan pekerjaan, dan reflog membuktikan sebaliknya.
Membaca catatan pergerakan HEAD#
Perintah git reflog menampilkan catatan pergerakan HEAD dari peristiwa terbaru ke yang paling lama.
git reflog04068da HEAD@{0}: reset: moving to HEAD~2
968dadf HEAD@{1}: commit: Tiga
83d9ee7 HEAD@{2}: commit: Dua
04068da HEAD@{3}: commit (initial): SatuSetiap baris memuat hash keadaan HEAD setelah peristiwa itu, sebutan posisi seperti HEAD@{1}, dan keterangan peristiwanya. Baris reset: moving to HEAD~2 adalah peristiwa yang tadi dianggap merusak, dan baris di bawahnya memuat hash commit Tiga yang oleh log dianggap hilang. Penamaan HEAD@{n} menyatakan keadaan HEAD n peristiwa yang lalu, sehingga menjadi alamat langsung untuk pemulihan tanpa menyalin hash.
Memulihkan commit yang terasa hilang#
Pemulihan berbentuk pemindahan penunjuk kembali ke keadaan sebelum kejadian, dan caranya sama dengan reset yang tadi dipakai.
git reset --hard HEAD@{1}
git log --onelineHEAD is now at 968dadf Tiga
968dadf Tiga
83d9ee7 Dua
04068da SatuRiwayat kembali utuh, dan catatan reflog bertambah satu baris yang mencatat pemulihan itu sendiri. Bentuk pemulihan kedua lebih lembut, yaitu membuat branch pada hash yang dituju dengan git branch pemulihan 8a2c4e6, sehingga keadaan tersebut memperoleh penunjuk tetap tanpa memindahkan branch aktif. Bentuk ini tepat untuk memulihkan branch yang terhapus, karena penunjuknya memang tidak ada lagi dan yang tersisa hanya hash pada reflog.
Masa simpan reflog juga perlu diketahui agar jaring pengaman ini tidak dianggap kekal. Baris yang menunjuk commit yang tidak lagi dicapai branch mana pun disimpan secara bawaan selama sekitar 90 hari, dan setelah itu pengumpul sampah Git dapat membersihkannya. Pemulihan yang disadari perlu dilakukan dalam jendela itu, atau diamankan lebih awal dengan branch pemulihan.
Menelusuri reflog dengan waktu#
Catatan reflog juga dapat dibaca dengan penanda waktunya, yang berguna apabila posisi numerik seperti HEAD@{1} tidak mudah dihitung pada catatan yang panjang. Opsi --date=iso menampilkan waktu setiap peristiwa dengan format tanggal lengkap.
git reflog --date=iso -4968dadf HEAD@{2026-11-01 09:00:00 +0700}: reset: moving to HEAD@{1}
04068da HEAD@{2026-11-01 09:00:00 +0700}: reset: moving to HEAD~2
968dadf HEAD@{2026-11-01 09:00:00 +0700}: commit: Tiga
83d9ee7 HEAD@{2026-11-01 09:00:00 +0700}: commit: DuaKeluaran pada penyetelan tertentu menampilkan waktu peristiwa di samping catatannya, dan bentuk HEAD@{waktu} pun diterima sebagai alamat, sehingga keadaan HEAD pada pukul tertentu dapat dimintai langsung. Pada pemulihan keadaan yang bercampur banyak reset dan perpindahan, membaca reflog dengan waktunya mempersempit pencarian dengan cepat, dan hash pada baris yang tepat menjadi alamat pemulihannya.
Reflog milik setiap penunjuk#
Perintah git reflog tanpa argumen menampilkan catatan HEAD, dan setiap penunjuk lain memiliki catatannya sendiri. Branch menyimpan reflog berisi pergerakannya, sehingga keadaan sebelum sebuah branch dipindahkan atau direset dapat dilihat pada reflog branch tersebut, bukan hanya pada reflog HEAD.
git reflog show main -3968dadf main@{0}: reset: moving to HEAD@{1}
04068da main@{1}: reset: moving to HEAD~2
968dadf main@{2}: commit: TigaPenamaan main@{n} mengikuti pola yang sama dengan HEAD@{n}, dan alamat inilah yang dipakai saat memulihkan branch yang penunjuknya tergelincir tanpa mengganggu posisi HEAD saat ini. Keberadaan dua catatan ini menjelaskan mengapa pemulihan hampir selalu mungkin: peristiwa yang menggeser penunjuk mana pun selalu tertulis pada catatan penunjuk itu sendiri.
Ringkasan#
- Reflog mencatat setiap pergerakan HEAD pada repository lokal, termasuk reset dan amend yang membuat commit terasa hilang.
- Catatannya dibaca dengan
git reflog, dan alamatHEAD@{n}menyebut keadaan HEAD n peristiwa yang lalu. - Pemulihan dilakukan dengan
git reset --hard HEAD@{n}untuk mengembalikan posisi, ataugit branch nama hashuntuk memberi penunjuk tetap. - Baris reflog menuju commit yang tak tercapai disimpan sekitar 90 hari, dan reflog tidak pernah menjadi cadangan lintas mesin.
Referensi#
- git-reflog — Git Documentation — rujukan perintah reflog dan masa simpan catatannya.
- Git Tools - Reset Demystified — Pro Git — bagian yang menempatkan reflog sebagai jaring pengaman reset.