Apa sebenarnya branch itu

Branch sebagai pointer 41 karakter yang murah dan lokal, bukan salinan direktori.

Daftar isi

Branch adalah fitur yang membuat model data Git terasa berbeda dari sistem kontrol versi lain, dan penjelasannya mengejutkan banyak orang: branch tidak menyalin apa pun, melainkan hanya sebuah berkas berisi 41 karakter. Topik ini membahas apa itu branch menurut basis data Git, mengapa pembuatannya sangat murah, dan apa yang benar-benar terjadi pada working directory ketika branch dipakai. Pemahaman ini membuat seluruh operasi percabangan terasa ringan.

Branch adalah pointer#

Branch pada Git adalah penunjuk bergerak (pointer) menuju satu commit. Secara fisik, branch tersimpan sebagai berkas kecil di dalam .git/refs/heads/, dan isinya hanyalah hash commit yang ditunjuknya. Buktinya dapat dilihat langsung pada repository latihan.

bash
# tanggal commit ditetapkan agar keluaran contoh dapat direproduksi secara persis
export GIT_AUTHOR_DATE="2026-11-01T09:00:00+07:00"
export GIT_COMMITTER_DATE="2026-11-01T09:00:00+07:00"
bash
rm -rf /tmp/lab-branch
mkdir /tmp/lab-branch
cd /tmp/lab-branch
git init -b main
git config user.name "Budi"
git config user.email "[email protected]"
printf "Bab satu.\n" > buku.txt
git add buku.txt
git commit -m "Mulai menulis"
printf "Bab satu.\nBab dua.\n" > buku.txt
git commit -am "Lanjut bab dua"
cat .git/refs/heads/main
text Keluaran
Initialized empty Git repository in /tmp/lab-branch/.git/
[main (root-commit) ad51adc] Mulai menulis
 1 file changed, 1 insertion(+)
 create mode 100644 buku.txt
[main d02ec65] Lanjut bab dua
 1 file changed, 1 insertion(+)
d02ec65d1b0b5ffde4848b64e4269a464cb090b0

Isi berkas main adalah hash penuh commit terakhir, sepanjang 40 karakter heksadesimal ditambah satu karakter baris baru. Setiap commit baru pada branch tersebut memperbarui berkas 41 karakter ini, dan seluruh mekanisme percabangan pada dasarnya adalah pembuatan dan pemindahan berkas seperti itu.

Membuat branch baru berarti menulis satu berkas penunjuk baru.

bash
git branch fitur-uji
ls .git/refs/heads
cat .git/refs/heads/fitur-uji
text Keluaran
fitur-uji
main
d02ec65d1b0b5ffde4848b64e4269a464cb090b0

Branch fitur-uji menunjuk commit yang sama dengan main, dan tidak ada berkas proyek yang disalin. Perintah git branch -v menampilkan seluruh penunjuk beserta commitnya dalam satu tabel.

bash
git branch -v
text Keluaran
  fitur-uji d02ec65 Lanjut bab dua
* main      d02ec65 Lanjut bab dua

Tanda bintang menandai branch aktif, dan kedua branch menunjuk commit yang sama persis. Mereka hanya akan berpisah setelah commit baru dibuat pada salah satunya.

Branch sebagai penunjuk menuju commitcommit5c3e8a2commit9f7b2d4parentmainfitur-ujiHEAD
Branch sebagai penunjuk menuju commit, dengan HEAD menandai branch aktif

Murah dan lokal#

Membuat branch hanya menulis 41 karakter ke disk, sehingga operasinya nyaris tidak terasa. Tidak ada penyalinan direktori, tidak ada unduhan, dan tidak ada server yang dilibatkan, karena penunjuk branch hidup di .git milik repository lokal. Proyek dengan puluhan branch aktif tidak membuat repository menjadi berat, karena biaya penyimpanan setiap branch tidak tergantung besar proyek.

Murahnya biaya ini mengubah kebiasaan kerja. Pada sistem yang membuat branch mahal, pengembang menumpuk banyak pekerjaan pada satu jalur lama sebelum berpisah. Pada Git, pola yang sehat justru membuat branch baru untuk setiap gagasan, mengerjakannya dalam waktu singkat, lalu menggabungkan atau membuangnya. Branch menjadi alat penyusunan pekerjaan harian, bukan struktur arsip yang dijaga berbulan-bulan.

Branch bukan salinan direktori#

Satu kesalahpahaman yang sering muncul adalah membayangkan branch sebagai salinan folder terpisah. Kenyataannya hanya ada satu working directory, dan berpindah branch mengubah isinya agar sesuai dengan commit yang ditunjuk branch tujuan. Berkas yang hanya ada pada satu branch muncul dan hilang mengikuti perpindahan itu, sedangkan berkas yang tidak dikelola Git dibiarkan apa adanya.

Konsekuensinya bersifat dua arah. Commit yang dibuat pada sebuah branch tidak terlihat oleh branch lain sampai kedua riwayat digabungkan, karena branch lain menunjuk bagian rantai yang berbeda. Sebaliknya, penunjuk branch bergerak otomatis setiap kali commit baru dibuat di atasnya, sehingga branch selalu menandai ujung terbaru jalurnya. Gerak berpasangan antara penunjuk dan commit inilah yang dibedah lebih dekat pada pembahasan HEAD.

Ringkasan#

  • Branch adalah berkas 41 karakter di .git/refs/heads/ yang isinya hash commit yang ditunjuk.
  • Membuat branch tidak menyalin berkas proyek dan tidak melibatkan jaringan, sehingga biayanya nyaris nol.
  • Hanya ada satu working directory, dan berpindah branch mengubah isinya mengikuti commit yang ditunjuk.
  • Penunjuk branch bergerak sendiri setiap commit baru dibuat di atasnya.

Referensi#