Branch fitur yang sudah tergabung ke main menyelesaikan tugas hidupnya: pekerjaannya utuh di riwayat utama, namanya tinggal bekal tidak perlu. Membiarkannya di remote membuat daftar cabang membludak, rekan baru bingung mana yang aktif, dan referensi usang bermunculan di clone semua orang — persoalan yang kita diagnosis di chapter Remote Branch Management . Chapter ini menutup siklusnya: menghapus branch dari remote dengan git push origin --delete, memahami sintaks lamanya, merapikan cabang lokal yang tertinggal, dan memverifikasi hasil akhirnya.

Satu Branch yang Sudah Digabungkan #

Lab-nya mengikuti alur kerja nyata: bare repository proyek-utama.git berisi satu commit awal, Budi meng-clone-nya lalu membuat branch fitur:

bash
git switch -c fitur

Output yang Dihasilkan:

text
Switched to a new branch 'fitur'

Halaman pengiriman dibuat, commit dijalankan, lalu branch dikirim dengan -u:

bash
git push -u origin fitur

Output yang Dihasilkan:

text
To /home/z/my-project/tutorial-extracted/work/sandbox/remote-repository/part-b/latihan-hapus/proyek-utama.git
 * [new branch]      fitur -> fitur
branch 'fitur' set up to track 'origin/fitur'.

Selanjutnya Budi kembali ke main, menambah daftar produk agar main ikut maju, lalu menggabungkan fitur:

bash
git merge fitur

Output yang Dihasilkan:

text
Merge made by the 'ort' strategy.
 pengiriman.md | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 pengiriman.md

Bentuk penggabungannya terlihat di graf:

bash
git log --oneline --graph -6

Output yang Dihasilkan:

text
*   55de459 Merge branch 'fitur'
|\  
| * d846178 Tambah halaman pengiriman
* | 6123f82 Tambah daftar produk
|/  
* bf0d4bd Buat README toko

Puncak graf adalah commit merge; seluruh isi fitur kini terjangkau dari main. Hasil ini dikirim ke remote — dan Siti ikut meng-clone setelahnya, sehingga salinannya mengenal fitur. Saatnya membereskan.

Menghapus dengan push –delete #

Bentuk modernnya satu perintah eksplisit:

bash
git push origin --delete fitur

Output yang Dihasilkan:

text
To /home/z/my-project/tutorial-extracted/work/sandbox/remote-repository/part-b/latihan-hapus/proyek-utama.git
 - [deleted]         fitur

Penanda - [deleted] fitur mencatat hilangnya branch fitur dari remote. Pesan ini singkat saja — hash posisi terakhirnya tidak ikut dicetak; komitmen yang pernah tercatat tetap aman selama masih terjangkau dari branch lain, dan di sini seluruhnya sudah tergabung ke main. Perintah yang sama pernah kita lihat dari sisi penghapus di chapter git fetch dan dari sisi penerima di chapter Remote Branch Management . Yang mengejutkan justru keluaran git branch -r sesudahnya:

bash
git branch -r

Output yang Dihasilkan:

text
  origin/HEAD -> origin/main
  origin/main

origin/fitur ikut lenyap dari salinan Budi tanpa perintah prune: push yang menghapus cabang remote sekaligus membereskan salinan penunjuk di repository pengirimnya. Kebalikannya tidak berlaku — penghapusan dari sisi orang lain, seperti yang dialami Siti, menuntut penyapuan terpisah.

Sintaks Lama: push origin :fitur #

Sebelum flag --delete ada, penghapusan ditulis lewat refspec yang kosong di sisi sumber:

bash
git push origin :eksperimen

Perintah ini dijalankan setelah Budi membuat dan mengirim branch percobaan eksperimen — lalu menyadarinya tidak jadi dipakai. Keluarannya bentuk yang sama:

Output yang Dihasilkan:

text
To /home/z/my-project/tutorial-extracted/work/sandbox/remote-repository/part-b/latihan-hapus/proyek-utama.git
 - [deleted]         eksperimen

Logikanya ada di pola refspec src:dst: kiri sumber, kanan tujuan. Mengirim apa pun ke eksperimen di remote dengan sumber yang tidak disebut berarti memindahkan penunjuk ke ketiadaan — alias menghapus. Sintaks titik dua ini masih berfungsi dan kerap ditemui di dokumentasi lama, tetapi --delete menang jelas untuk keterbacaan; keduanya terdokumentasi di dokumentasi git push .

Merapikan Cabang Lokal #

Remote sudah bersih; meja kerja belum. Cabang lokal tidak ikut terhapus oleh penghapusan di remote:

bash
git switch main

Output yang Dihasilkan:

text
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
bash
git branch -d fitur

Output yang Dihasilkan:

text
Deleted branch fitur (was d846178).

Baris Deleted branch fitur (was d846178). — inilah keluaran yang memuat hash posisi terakhir, dicetak oleh penghapusan lokal, bukan remote. Flag -d sengaja hanya mau menghapus branch yang sudah tergabung; fitur aman karena isinya utuh di main. Giliran eksperimen yang tidak pernah tergabung:

bash
git branch -D eksperimen

Output yang Dihasilkan:

text
Deleted branch eksperimen (was f925395).

Flag -D (huruf besar) menghapus tanpa memeriksa tergabung — keputusan yang harus sadar karena komitmen yang belum tergabung ikut terlepas. Perilaku kedua flag dibedah lengkap di chapter Menghapus Branch .

Referensi Tertinggal di Clone Lain #

Siti meng-clone sebelum fitur dihapus, jadi salinannya masih memegang penunjuk lama:

bash
git branch -r

Output yang Dihasilkan (di clone siti):

text
  origin/HEAD -> origin/main
  origin/fitur
  origin/main

Inilah persis keadaan stale dari chapter Remote Branch Management — cabangnya tiada di remote, salinannya masih tercatat. Penyapuannya:

bash
git fetch --prune

Output yang Dihasilkan (di clone siti):

text
From /home/z/my-project/tutorial-extracted/work/sandbox/remote-repository/part-b/latihan-hapus/proyek-utama
 - [deleted]         (none)     -> origin/fitur

Verifikasi Akhir dan Kebiasaan Pasca Merge #

Hasil seluruh perapian bisa diperiksa dari satu potret:

bash
git remote show origin

Output yang Dihasilkan:

text
* remote origin
  Fetch URL: /home/z/my-project/tutorial-extracted/work/sandbox/remote-repository/part-b/latihan-hapus/proyek-utama.git
  Push  URL: /home/z/my-project/tutorial-extracted/work/sandbox/remote-repository/part-b/latihan-hapus/proyek-utama.git
  HEAD branch: main
  Remote branch:
    main tracked
  Local branch configured for 'git pull':
    main merges with remote main
  Local ref configured for 'git push':
    main pushes to main (up to date)

Hanya main yang tersisa — cabangnya tunggal, ikatannya satu, push-nya sejajar. Urutan perapian pasca merge yang sehat kini terangkai: hapus branch di remote, hapus cabang lokalnya, sapu referensi di clone lain bila perlu, lalu verifikasi. Pada alur kerja pull request, banyak layanan hosting menjalankan langkah pertama otomatis begitu pull request diterima — opsi “delete branch” setelah merge; sisanya tetap tugas kita di meja masing-masing, dan pola lengkapnya dibahas di chapter Feature Branch Workflow .

Dengan ini section Remote Repository tuntas: remote dikenali, dikelola, diisi, dan dibersihkan. Namun perhatikan kembali keluaran-keluaran kita: riwayat main kini memuat commit merge, commit perbaikan, dan pesan yang kadang kurang rapi — bentuk yang masih jauh dari garis lurus yang kita kagumi di chapter Sinkronisasi Remote . Menata ulang riwayat itulah pekerjaan besar berikutnya: section Rebasing dan Riwayat Lanjutan mengajarkan rebase, interactive rebase, dan batas-batas aman menulis ulang sejarah.