Menghapus branch dengan git branch -D terasa final: nama branch lenyap dari daftar, dan Git bahkan tidak bertanya ulang. Pemahaman kita dari chapter sebelumnya sudah membocorkan akhir ceritanya — branch hanyalah penunjuk kecil berisi satu hash, dan menghapus penunjuk tidak menghapus commit yang ditunjuknya. Yang perlu dicari hanyalah hash posisi terakhir branch itu, dan reflog
menyimpannya. Chapter ini mengeksekusi penghapusan sungguhan, membuktikan bahwa git reflog masih tahu ke mana fitur pernah pergi, lalu membangkitkannya kembali dengan satu perintah.
Skenario: fitur Dihapus dengan -D #
Repository latihan latihan-branch menampung branch fitur berisi dua commit yang belum digabungkan ke main — kondisi yang membuat opsi -d menolak jalan. Selagi branch masih hidup, reflog miliknya bisa dibaca langsung:
mkdir latihan-branch && cd latihan-branch
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf 'beranda\n' > situs.md
git add situs.md
git commit -m "Buat halaman beranda"
git switch -c fitur
printf 'galeri foto\n' > galeri.md
git add galeri.md
git commit -m "Mulai halaman galeri"
printf 'galeri foto\nalbum 2026\n' > galeri.md
git add galeri.md
git commit -m "Selesaikan halaman galeri"
git reflog show fiturOutput yang Dihasilkan:
5fd8a64 fitur@{0}: commit: Selesaikan halaman galeri
d12558d fitur@{1}: commit: Mulai halaman galeri
5707824 fitur@{2}: branch: Created from HEADReflog fitur mencatat dua pergerakannya: kelahiran dari HEAD dan commit terakhirnya. Sekarang kita kembali ke main, maju satu commit agar percabangan semakin jelas, lalu coba hapus dengan opsi aman -d:
git switch main
printf 'beranda\nfaq\n' > situs.md
git add situs.md
git commit -m "Tambah halaman faq"
git branch -d fiturOutput yang Dihasilkan:
error: the branch 'fitur' is not fully merged
hint: If you are sure you want to delete it, run 'git branch -D fitur'
hint: Disable this message with "git config advice.forceDeleteBranch false"-d menolak — branch belum tergabung penuh ke main, persis perilaku yang dibahas chapter Menghapus Branch
. Penolakan ini adalah jaring pengaman terakhir. Karena skenario kita memang sengaja ceroboh, opsi paksa -D dijalankan:
git branch -D fiturOutput yang Dihasilkan:
Deleted branch fitur (was 5fd8a64).fitur resmi terhapus. Perintah yang merujuk namanya kini gagal keras:
git log --oneline fiturOutput yang Dihasilkan:
fatal: ambiguous argument 'fitur': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'Mencari Posisi Terakhir fitur di reflog #
Bila keluaran -D sudah lewat, reflog HEAD
mengambil alih peran pemandu:
git reflogOutput yang Dihasilkan:
c69bc6e HEAD@{0}: commit: Tambah halaman faq
5707824 HEAD@{1}: checkout: moving from fitur to main
5fd8a64 HEAD@{2}: commit: Selesaikan halaman galeri
d12558d HEAD@{3}: commit: Mulai halaman galeri
5707824 HEAD@{4}: checkout: moving from main to fitur
5707824 HEAD@{5}: commit (initial): Buat halaman berandaPerhatikan baris 5fd8a64 HEAD@{2}: commit: Selesaikan halaman galeri — itulah posisi terakhir fitur, tercatat karena commit itu dibuat selagi HEAD berada di branch fitur. Baris HEAD@{1} yang bertuliskan checkout: moving from fitur to main menegaskan jejak keberadaannya. Reflog fitur sendiri sudah tidak bisa dibaca — penghapusan branch ikut menghapus berkas reflog milik branch itu — tetapi salinan jejaknya di reflog HEAD bertahan.
Membangkitkan fitur Kembali #
Memulihkan branch hanya butuh satu perintah: git branch dengan nama branch dan titik berdirinya. Sintaks HEAD@{2} bekerja sama mulusnya dengan hash mentah:
git branch fitur HEAD@{2}
git log --oneline fiturOutput yang Dihasilkan:
5fd8a64 Selesaikan halaman galeri
d12558d Mulai halaman galeri
5707824 Buat halaman berandaBranch fitur hidup kembali dengan riwayat utuh: dua commit galerinya masih menempel pada “Buat halaman beranda”. git branch fitur 5fd8a64 menghasilkan keadaan yang persis sama — cukup ganti HEAD@{2} dengan hash dari keluaran -D atau baris reflog. Seluruh bentuk perintah git branch yang dipakai di chapter ini terdokumentasi di git-branch
.
Batasan: Branch yang Tak Pernah Aktif #
Satu celah tetap perlu diwaspadai. Reflog HEAD hanya mencatat pergerakan HEAD — branch yang tidak pernah di-switch dan tidak pernah menerima commit tidak meninggalkan jejak apa pun di sana. Kita buktikan dengan branch baru yang langsung dihapus tanpa pernah dikunjungi:
git branch topik-baru
git branch -D topik-baru
git reflogOutput yang Dihasilkan:
c69bc6e HEAD@{0}: commit: Tambah halaman faq
5707824 HEAD@{1}: checkout: moving from fitur to main
5fd8a64 HEAD@{2}: commit: Selesaikan halaman galeri
d12558d HEAD@{3}: commit: Mulai halaman galeri
5707824 HEAD@{4}: checkout: moving from main to fitur
5707824 HEAD@{5}: commit (initial): Buat halaman berandaKeluarannya identik dengan sebelumnya — tidak ada satu baris pun tentang topik-baru. Posisinya sama dengan ujung main, commit yang dirujuknya tetap hidup karena dirujuk main, tetapi tidak ada catatan yang menghubungkan nama topik-baru dengan niat kita. Satu-satunya tempat hash posisinya pernah muncul adalah keluaran git branch -D itu sendiri.
Dengan hash posisi terakhir sebagai satu-satunya bahan baku, branch apa pun yang pernah aktif bisa dibangkitkan dalam hitungan detik. Berikutnya kita turun ke satuan yang lebih kecil namun sama sering terjadi: satu berkas yang terhapus — baik yang belum sempat di-commit maupun yang sudah telanjur masuk riwayat — di Memulihkan File Terhapus .