Branch management artinya merawat daftar branch: melihat branch apa saja yang ada, mengganti nama yang salah ketik, dan menghapus yang sudah selesai dipakai. Ingat lagi dari materi Branching: branch cuma label yang menunjuk ke satu commit. Mirip pembatas buku. Mencabut pembatas gak merobek halamannya, dan halaman yang sudah masuk ke bab utama tetap bisa dibaca. Yang bahaya cuma satu: mencabut satu-satunya pembatas dari halaman yang belum masuk ke mana-mana, karena halaman itu jadi susah dicari lagi.
🧪 Tebakan cepat: branch
tempsudah di-merge kemain, lalu kamu hapus. Commit "temp work" yang dibuat ditempikut hilang gak? Tebak dulu, jawabannya ada di bagian "Menghapus branch: -d dan -D".
Melihat daftar branch
Contohnya repo dengan tiga branch: main, logn (salah ketik, harusnya login, dan sudah di-merge), dan eksperimen (belum di-merge).
$ git branch
eksperimen
logn
* main
git branchtanpa nama menampilkan semua branch lokal (yang ada di laptopmu), urut abjad. Tanda*menandai branch tempat kamu berada sekarang, yaitu yang ditunjuk HEAD.git branch -a(kependekan dari--all) menampilkan branch lokal dan branch remote, yaitu salinan branch dari server seperti GitHub. Branch remote muncul dengan awalanremotes/. Remote dibahas di materi Git Remote & Clone.
$ git branch -a
* main
remotes/origin/main
Mengganti nama: git branch -m
Salah ketik nama branch? Ganti namanya, gak perlu bikin ulang.
$ git branch -m logn login
$ git branch
eksperimen
login
* main
-mkependekan dari--move. Tulis nama lama, lalu nama baru. Berhasil berarti gak ada output.- Kalau kamu sedang berada di branch yang mau diganti, cukup satu nama:
git branch -m nama-baru. - Commit-nya gak berubah sama sekali. Cuma labelnya yang ganti nama.
Menghapus branch: -d dan -D
Setelah di-merge, branch fitur biasanya gak dibutuhkan lagi. Hapus dengan -d (kependekan dari --delete):
$ git branch -d login
Deleted branch login (was 3e1a9c2).
Commit di login tetap ada, karena sudah jadi bagian dari main. Yang hilang cuma labelnya. Itu jawaban tebakannya: commit "temp work" juga tetap ada di main, karena main sudah menunjuk ke sana.
-d itu hati-hati. Branch yang punya commit yang belum masuk ke branch tempat kamu berada akan ditolak:
$ git branch -d eksperimen
error: the branch 'eksperimen' is not fully merged
hint: If you are sure you want to delete it, run 'git branch -D eksperimen'
- "not fully merged" artinya ada commit di
eksperimen, misalnya "coba warna", yang belum ada dimain. Kalau labelnya dicabut, commit itu gak bisa dicari lagi lewat nama apa pun. -D(D besar) menghapus paksa, sudah di-merge atau belum. Pakai cuma kalau kamu yakin pekerjaannya memang mau dibuang, misalnya eksperimen yang gagal.- Commit yang ditinggal
-Dgak langsung lenyap dari disk, tapi gak punya nama lagi. Cara memungutnya kembali dibahas di materi Reflog.
Alur feature branch dari awal sampai bersih
Ini alur latihannya: bikin branch, kerja di sana, merge, lalu bersihkan. Pola ini disebut feature branch workflow, dan dipakai hampir semua tim.
$ git init
$ git add .
$ git commit -m "initial"
$ git switch -c temp # sama dengan: git checkout -b temp
Switched to a new branch 'temp'
$ echo "kerja sementara" >> main.js
$ git add .
$ git commit -m "temp work"
$ git switch main # sama dengan: git checkout main
Switched to branch 'main'
$ git merge temp
Updating 35bed05..4d935e1
Fast-forward
main.js | 1 +
1 file changed, 1 insertion(+)
$ git branch -d temp
Deleted branch temp (was 4d935e1).
| Sesudah | main |
temp |
HEAD |
|---|---|---|---|
| commit "initial" | initial | belum ada | main |
git switch -c temp |
initial | initial | temp |
| commit "temp work" | initial | temp work | temp |
git switch main, git merge temp |
temp work | temp work | main |
git branch -d temp |
temp work | dihapus | main |
git switchdangit checkoutdua-duanya bisa dipakai buat pindah branch.switchlebih baru (sejak Git 2.23) dan khusus untuk pindah branch,checkoutlebih lama dan masih jalan.echo ... >> main.jsmenambah satu baris kemain.js, supaya ada perubahan yang bisa di-commit.- Merge-nya fast-forward:
maincukup digeser maju ke commit "temp work", tanpa commit baru. Hasilnyamainpunya 2 commit, dan yang paling atas "temp work". - Hapusnya dari
main, karena branch yang sedang kamu pakai gak bisa dihapus.
💡 Mencari branch yang aman dihapus
$ git branch --merged
login
* main
git branch --merged menampilkan branch yang semua commit-nya sudah ada di branch tempat kamu berada. Semua yang muncul aman dihapus dengan -d. Kebalikannya, git branch --no-merged, menampilkan yang masih punya commit sendiri.
⚠️ Jebakan yang sering ketemu
- Menghapus branch yang sedang kamu pakai. Git menolak dengan error
Cannot delete branch 'temp' checked out. Pindah dulu dengangit switch main, baru hapus. - Langsung pakai
-Dtiap kali-dmenolak. Penolakan itu peringatan bahwa ada commit yang belum di-merge. Cek dulu, merge kalau masih perlu, baru hapus. -Ddikira sama dengan-d. Hurufnya beda arti:-dkecil cuma menghapus yang sudah aman,-Dbesar menghapus paksa. Latihannya juga mengecek perintahgit branch -d, jadi pakai d kecil.- Menghapus sebelum merge. Kalau
git merge tempterlewat,-dmenolak (atau-Dmembuang pekerjaannya). Urutannya selalu: merge dulu, baru hapus.
TL;DR: Branch cuma label, jadi merawatnya murah. git branch menampilkan branch lokal (* = posisimu), git branch -a ikut menampilkan branch remote. git branch -m lama baru mengganti nama. git branch -d nama menghapus branch yang sudah di-merge, dan menolak dengan "not fully merged" kalau belum. git branch -D nama menghapus paksa. Commit yang sudah di-merge tetap ada setelah branch-nya dihapus. Branch yang sedang dipakai gak bisa dihapus, jadi pindah dulu ke main. Alurnya: git switch -c fitur, commit, git switch main, git merge fitur, git branch -d fitur.