Branch adalah penunjuk murah — satu berkas 41 byte — tetapi dibiarkan menumpuk ia jadi kebisingan: daftar git branch memanjang, branch lama terbaca seperti tugas yang belum selesai, dan nama-nama bagus terkunci oleh pekerjaan yang sudah mati. Setelah merge diterima, branch sumbernya kehilangan alasan hidup. Chapter ini menghapus branch dengan dua tingkat kehati-hatian — -d yang menolak membuang pekerjaan yang belum tergabung, dan -D yang memaksa — lalu membuktikan bahwa penghapusan tidak pernah membakar commit mentah-mentah. Daftar lengkap opsi git branch ada di git-scm.com/docs/git-branch
.
Menghapus Branch yang Sudah Tergabung #
Repository latihan menyiapkan dua branch dengan nasib berbeda: fitur-keranjang yang akan digabungkan, dan fitur-eksperimen yang sengaja dibiarkan menyimpang:
mkdir latihan-hapus && cd latihan-hapus
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf 'katalog.md\n' > katalog.md
git add katalog.md
git commit -m "Mulai katalog toko"
git switch -c fitur-keranjang
printf 'kopi\ngula\n' > keranjang.md
git add keranjang.md
git commit -m "Susun keranjang belanja"
git switch main
git merge fitur-keranjangOutput yang Dihasilkan (perintah git merge fitur-keranjang):
Updating fb2c26f..970753d
Fast-forward
keranjang.md | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 keranjang.mdPenggabungan terjadi sebagai fast-forward — main diam selagi fitur dikerjakan, persis pola chapter Fast-Forward Merge
. Isi keranjang kini milik main; branchnya tinggal label. Sebelum menghapus, ada satu audit cepat yang layak jadi kebiasaan:
git branch --mergedOutput yang Dihasilkan:
fitur-keranjang
* maingit branch --merged mendaftar branch yang isinya sudah seluruhnya tergabung ke branch aktif — fitur-keranjang dan main sendiri. Perhatikan siapa yang tidak hadir: fitur-eksperimen. Daftar ini adalah kandidat hapus yang aman. Penghapusannya:
git branch -d fitur-keranjangOutput yang Dihasilkan:
Deleted branch fitur-keranjang (was 970753d).Kabar perpisahan itu informatif: Deleted branch fitur-keranjang (was 970753d). — Git mencatat posisi terakhir branch yang dihapus, memudahkan pulih bila terlanjur menyesal. Tidak ada commit yang musnah, karena seluruh isinya sudah hidup di main.
Penolakan untuk Branch yang Belum Tergabung #
fitur-eksperimen adalah kasus kebalikannya: berisi satu commit yang tidak ada jalurnya ke main. Opsi kecil -d (huruf kecil) menolak:
git branch -d fitur-eksperimenOutput yang Dihasilkan:
error: the branch 'fitur-eksperimen' is not fully merged
hint: If you are sure you want to delete it, run 'git branch -D fitur-eksperimen'
hint: Disable this message with "git config advice.forceDeleteBranch false"Baris pertamanya adalah inti perlindungannya: the branch 'fitur-eksperimen' is not fully merged — Git menolak menghapus penunjuk ke pekerjaan yang belum tergabung, karena menghapus penunjuk berarti memutus satu-satunya jalan menuju commit itu. Dua baris hint menyusul: saran paksa lewat -D, dan cara mematikan saran itu bagi yang sudah paham risikonya.
Merasa yakin? Paksa saja:
git branch -D fitur-eksperimenOutput yang Dihasilkan:
Deleted branch fitur-eksperimen (was b9b42bb).Huruf besar -D melewati pemeriksaan dan menghapus branch tersebut. Yang terhapus cuma penunjuk — berkas .git/refs/heads/fitur-eksperimen — bukan commitnya. Buktinya bisa diujikan langsung pada hash yang tertera di keluaran tadi:
git log --oneline -1 b9b42bbOutput yang Dihasilkan:
b9b42bb Tambah catatan eksperimenCommit “Tambah catatan eksperimen” masih utuh dan bisa dibaca; hash pada keluaran mesin pembaca akan berbeda mengikuti commit sungguhan. Kondisinya mirip orang tanpa alamat: objeknya hidup, tapi tidak lagi ditunjuk branch mana pun. Commit seperti ini disebut unreachable — Git membiarkannya mengapung untuk sementara, lalu garbage collector memangkasnya secara berkala (lebih kurang 30 hari untuk objek tak terjangkau), dan reflog tetap mencatat jejaknya selama itu. Cara memulihkan branch yang terlanjur terhapus dibahas khusus di chapter git reflog dan Memulihkan Branch Terhapus .
Branch Aktif Tidak Bisa Dihapus #
Ada satu penolakan tanpa opsi paksa: branch tempat kita berdiri. Coba hapus main sambil berada di dalamnya:
git branch -d mainOutput yang Dihasilkan:
error: cannot delete branch 'main' used by worktree at '/home/z/my-project/tutorial-extracted/work/sandbox/branch-dan-merging/part-b/latihan-hapus'Pesan cannot delete branch 'main' used by worktree menyebut lokasi kerja yang sedang memakainya — jalur pada keluaran menyesuaikan lokasi direktori di mesin masing-masing. Sistem worktree Git menjaga branch aktif karena menghapusnya sama dengan mencabut lantai di bawah kaki. Solusinya selalu dua langkah: pindah dulu (git switch main bila sedang di branch lain), baru hapus. Daftar akhir latihan ini kini bersih:
git branchOutput yang Dihasilkan:
* mainHousekeeping Pasca Merge #
Ritual kebersihan setelah tiap merge diterima hanya butuh empat ketukan:
git branch --merged— audit branch mana yang sudah tuntas.git branch -d <nama>untuk tiap kandidat — boleh beberapa sekaligus dalam satu perintah, misalnyagit branch -d fitur-a fitur-b.-Dhanya untuk eksperimen yang memang layak dikubur — sadar bahwa pemulihannya berbatas waktu.- Branch di remote punya gerbang hapus tersendiri lewat push — dibahas di chapter Menghapus Remote Branch .
Nama yang tersisa di daftar branch sebaiknya nama yang benar-benar hidup. Tapi bagaimana bila nama yang tersisa justru keliru — salah ketik, atau konvensi tim berganti? Sebelum terpaksa menghapus dan membuat ulang, Git menyediakan jalan ganti nama: Rename Branch .