Branch adalah jalur kerja terpisah di repo-mu: kamu bisa mencoba fitur baru tanpa mengganggu versi yang sudah jalan. Mirip slot save di game. Save-mu di slot "main" sudah sampai level 3, lalu kamu mau coba jalan yang berisiko. Kamu bikin slot baru dari titik yang sama dan main terus di sana. Slot "main" tetap di level 3, dan kalau eksperimennya gagal, kamu tinggal balik ke slot itu.
🧪 Tebakan cepat: kamu sedang di branch
fitur-navbar, lalu bikin satu commit. Branchmainikut maju, atau tetap di tempat? Tebak dulu, jawabannya ada di bagian "Commit cuma menggeser branch yang aktif".
Branch itu nama yang menunjuk ke satu commit
Kamu sudah tahu tiap commit adalah satu snapshot proyekmu. Branch cuma sebuah nama yang menunjuk ke satu commit, yaitu commit paling baru di jalur itu. Bikin branch gak menyalin file apa pun, jadi selalu instan, sebesar apa pun proyeknya.
mainadalah branch utama, yang dibuat Git waktu commit pertamamu. Di repo lama namanya seringmaster. Sebelum commit pertama,mainbelum benar-benar ada, karena belum ada commit yang bisa ditunjuk.HEADadalah penanda "kamu sedang di sini". HEAD menunjuk ke satu branch, dan branch itu disebut branch aktif. Commit berikutnya akan masuk ke branch aktif.
Bikin branch dan pindah ke sana
# Cara 1: dua langkah
git branch fitur-navbar # bikin branch baru, kamu masih di main
git switch fitur-navbar # pindah ke fitur-navbar
# Cara 2: satu langkah, bikin sekaligus pindah
git switch -c fitur-navbar
git branch fitur-navbarcuma bikin nama baru di commit tempat kamu berada. Kamu belum pindah.git switch fitur-navbarmemindahkan HEAD ke branch itu. Isi file di folder kerjamu ikut diganti sesuai commit yang ditunjuk branch tersebut.git switch -c fitur-navbarbikin dan pindah sekaligus.-csingkatan dari create.git checkoutadalah perintah lama yang masih jalan di mana-mana:git checkout fitur-navbarsama dengangit switch fitur-navbar, dangit checkout -b fitur-navbarsama dengangit switch -c fitur-navbar.switchmuncul di Git 2.23 khusus untuk urusan pindah branch, jadi lebih jelas. Kamu bakal ketemu dua-duanya.
Ini yang terjadi di terminal, dengan repo yang index.html-nya berisi <nav>Home</nav> dan sudah punya commit pertama:
$ git branch
* main
$ git switch -c fitur-navbar
Switched to a new branch 'fitur-navbar'
$ git branch
* fitur-navbar
main
git branch tanpa nama menampilkan semua branch lokal, diurutkan sesuai abjad, dengan tanda * di depan branch aktif. Kalau ada main, fitur-a, dan fitur-b dan kamu di main, yang tercetak fitur-a, fitur-b, lalu * main.
Commit cuma menggeser branch yang aktif
Lanjutkan repo tadi. Di fitur-navbar kamu menambah satu baris ke index.html (echo "<a>Produk</a>" >> index.html), menjalankan git add index.html, lalu commit. C1 dan C2 adalah dua commit-nya:
| Langkah | Perintah | main di |
fitur-navbar di |
HEAD |
|---|---|---|---|---|
| 1 | git commit -m "initial" |
C1 | belum ada | main |
| 2 | git switch -c fitur-navbar |
C1 | C1 | fitur-navbar |
| 3 | git commit -m "tambah link Produk" |
C1 | C2 | fitur-navbar |
| 4 | git switch main |
C1 | C2 | main |
- Langkah 2: branch baru lahir di commit yang sama dengan
main. Belum ada commit baru. - Langkah 3: commit C2 dibuat, dan cuma branch yang ditunjuk HEAD,
fitur-navbar, yang maju ke C2.maintetap di C1. Itu jawaban tebakannya. - Langkah 4: kamu balik ke
main. Git mengganti isi folder kerjamu dengan snapshot C1, jadiindex.htmlkembali berisi<nav>Home</nav>saja. Link Produk gak hilang: dia aman di C2, menunggu difitur-navbar.
Inilah gunanya branch: main tetap versi yang jalan, dan eksperimenmu tumbuh di jalurnya sendiri sampai siap digabung. Cara menggabungnya ada di pelajaran Merging.
⚠️ Jebakan yang sering ketemu
- Bikin branch sebelum commit pertama. Branch harus menunjuk ke commit. Di repo yang belum punya commit,
mainpun belum ada, padahal latihan ini mengecekmainharus ada. Commit dulu, baru bercabang. - Mengira
git branch fitur-navbarsudah memindahkanmu. Perintah itu cuma bikin nama. Commit berikutnya masih masuk kemain. Cek dulu dengangit branch(cari tanda*) ataugit status(barisOn branch ...). - Spasi atau typo di nama branch. Nama branch gak boleh pakai spasi, jadi
git branch fitur navbargak menghasilkanfitur-navbar. Pakai tanda hubung dan huruf kecil, persis seperti yang diminta.
TL;DR: Branch adalah nama yang menunjuk ke satu commit, dan HEAD menandai branch aktif. git branch menampilkan daftar branch (urut abjad, * = branch aktif), git branch nama bikin branch tanpa pindah, git switch nama (atau git checkout nama) pindah, dan git switch -c nama (atau git checkout -b nama) bikin sekaligus pindah. Commit cuma menggeser branch aktif, branch lain tetap di tempat. Branch utama biasanya main (di repo lama master), dan baru ada setelah commit pertama.