gitfetchbranchremoteMenengah4 mnt baca

Membersihkan Branch Remote: fetch --prune

Branch yang sudah dihapus di GitHub tetap menghantui daftar branch lokalmu sampai kamu menjalankan git fetch --prune.

Branch hantu yang tidak pernah pergi

Pernah melihat git branch -r menampilkan origin/fitur-lama padahal branch itu sudah di-merge dan dihapus di GitHub berminggu-minggu lalu? Itu bukan bug. Secara default, git fetch hanya menambah dan memperbarui referensi remote-tracking, tidak pernah menghapusnya. Branch remote yang sudah dihapus di server tetap tersimpan sebagai "fosil" di repomu sampai kamu memerintahkannya dibersihkan.

Kenapa Git bersikap seperti ini? Karena menghapus referensi secara diam-diam dianggap berisiko: bagaimana kalau kamu sedang mengerjakan sesuatu yang menunjuk ke ref itu? Jadi Git memilih aman: tidak menghapus apa pun kecuali diminta eksplisit. Masalahnya, lama-lama daftar branch jadi penuh sampah dan membingungkan, terutama di repo tim yang branch-nya dibuat dan dihapus tiap hari.

Perintahnya: fetch --prune

bash
git fetch --prune

Atau versi pendeknya:

bash
git fetch -p

Contoh output saat ada branch yang dibersihkan:

bash
From https://github.com/owner/repo
 - [deleted]         (none) -> origin/fitur-lama
 - [deleted]         (none) -> origin/fix-typo

Setiap baris [deleted] berarti satu remote-tracking branch yang sudah tidak ada di server dan sekarang ikut dihapus dari repomu. Setelah ini, git branch -r hanya menampilkan branch yang benar-benar masih hidup di remote.

Kapan dipakai, dan kapan tidak perlu

Pakai --prune kapan saja kamu merasa daftar branch remote sudah tidak sinkron dengan kenyataan, misalnya setelah sprint selesai dan puluhan branch PR dihapus, atau sebelum kamu membuat branch baru dan ingin memastikan namanya tidak bentrok dengan fosil lama.

Yang penting dipahami: prune itu aman. Ia hanya menghapus referensi remote-tracking (origin/x), bukan branch lokalmu dan bukan pekerjaanmu. Branch lokal fitur-lama yang masih kamu pegang tidak akan tersentuh walau origin/fitur-lama di-prune. Jadi tidak ada alasan takut memakainya.

Kalau kamu malas mengetik -p setiap kali, jadikan perilaku default:

bash
git config --global fetch.prune true

Mulai sekarang setiap git fetch dan git pull otomatis membersihkan branch yang sudah dihapus di server. Satu pengaturan, nol sampah branch selamanya. Alternatif manual per remote: git remote prune origin, yang efeknya sama dengan fetch --prune untuk remote itu saja.

Kesalahan umum pemula

Salah: mencoba menghapus remote-tracking branch dengan git branch -d origin/fitur-lama. Flag -d hanya untuk branch lokal, jadi perintah ini gagal atau tidak melakukan apa yang kamu kira. Benar: git fetch --prune adalah cara resmi membersihkan referensi remote yang sudah mati.

Salah: menghapus branch lokal dan berharap origin/ ikut bersih, atau sebaliknya. Branch lokal dan remote-tracking adalah dua ref yang berbeda dan dikelola terpisah. Benar: bersihkan branch lokal dengan git branch -d, bersihkan remote-tracking dengan fetch --prune. Dua pekerjaan, dua perintah.

Tantangan

Bersihkan fosil branch di repomu

Buka sebuah repo yang sudah lama kamu pakai, jalankan git branch -r dan catat branch yang kamu curigai sudah mati. Lalu jalankan git fetch --prune dan bandingkan daftarnya. Terakhir, aktifkan git config --global fetch.prune true.