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:

bash
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-keranjang

Output yang Dihasilkan (perintah git merge fitur-keranjang):

text
Updating fb2c26f..970753d
Fast-forward
 keranjang.md | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 keranjang.md

Penggabungan 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:

bash
git branch --merged

Output yang Dihasilkan:

text
  fitur-keranjang
* main

git 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:

bash
git branch -d fitur-keranjang

Output yang Dihasilkan:

text
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:

bash
git branch -d fitur-eksperimen

Output yang Dihasilkan:

text
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:

bash
git branch -D fitur-eksperimen

Output yang Dihasilkan:

text
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:

bash
git log --oneline -1 b9b42bb

Output yang Dihasilkan:

text
b9b42bb Tambah catatan eksperimen

Commit “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:

bash
git branch -d main

Output yang Dihasilkan:

text
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:

bash
git branch

Output yang Dihasilkan:

text
* main

Housekeeping Pasca Merge #

Ritual kebersihan setelah tiap merge diterima hanya butuh empat ketukan:

  1. git branch --merged — audit branch mana yang sudah tuntas.
  2. git branch -d <nama> untuk tiap kandidat — boleh beberapa sekaligus dalam satu perintah, misalnya git branch -d fitur-a fitur-b.
  3. -D hanya untuk eksperimen yang memang layak dikubur — sadar bahwa pemulihannya berbatas waktu.
  4. 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 .