Repository dengan beberapa branch ibarat gedung dengan beberapa lantai: sebelum naik-turun, kita perlu papan petunjuknya — lantai mana saja yang ada, kita sedang berdiri di lantai yang mana, dan apa isi tiap lantai. Git menyediakan papan itu lewat git branch beserta variannya, plus satu perintah git log yang menggambar seluruh peta dalam satu layar. Chapter ini menyusun repository latihan dengan empat branch, menambahkan remote lokal agar opsi remote ikut terlihat nyata, lalu membaca keluaran-keluaran tersebut satu per satu.

Menyiapkan Empat Branch #

Repository latihan kita beri dua commit di main, tiga branch fitur dari titik itu, dan satu commit di branch fitur-keranjang supaya posisi tiap penunjuk tidak seragam:

bash
mkdir latihan-lihat && cd latihan-lihat
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf '# Toko Budi\n' > README.md
git add README.md
git commit -m "Buat README toko"
printf '# Toko Budi\n\n## Produk\n- kopi\n- gula\n' > README.md
git add README.md
git commit -m "Tambah daftar produk"
git branch fitur-keranjang
git branch fitur-laporan
git branch fitur-desain
git switch fitur-keranjang
printf '# Toko Budi\n\n## Keranjang\n- kopi 2 pcs\n' > keranjang.md
git add keranjang.md
git commit -m "Catat isi keranjang"
git switch main

Keluaran git switch fitur-keranjang:

text
Switched to branch 'fitur-keranjang'

Keluaran git switch main:

text
Switched to branch 'main'

Daftar paling sederhana diperoleh tanpa argumen:

bash
git branch

Output yang Dihasilkan:

text
  fitur-desain
  fitur-keranjang
  fitur-laporan
* main

Tanda * di depan main menandai branch aktif — penunjuk yang sedang dibawa HEAD. Setiap perintah Git yang membuat commit baru akan menggerakkan penunjuk bertanda bintang itu, sesuai aturan dari chapter Membuat Branch .

Detail Posisi dengan -v #

Tanpa argumen, daftar hanya memuat nama. Flag -v menambahkan dua kolom penting: hash singkat commit yang ditunjuk dan subjek commit tersebut:

bash
git branch -v

Output yang Dihasilkan:

text
  fitur-desain    b5a28aa Tambah daftar produk
  fitur-keranjang 74926fc Catat isi keranjang
  fitur-laporan   b5a28aa Tambah daftar produk
* main            b5a28aa Tambah daftar produk

Baris fitur-keranjang terlihat paling maju — menunjuk commit “Catat isi keranjang” — sementara tiga penunjuk lainnya berbagi commit “Tambah daftar produk”. Dari sini kita tahu tanpa berpindah tempat bahwa fitur-keranjang memiliki satu commit di depan main. Nama branch yang diawali fitur- juga bisa disaring dengan pola glob:

bash
git branch --list 'fitur*'

Output yang Dihasilkan:

text
  fitur-desain
  fitur-keranjang
  fitur-laporan

Ketika repository memuat puluhan branch, filter seperti ini menyempitkan daftar ke kelompok yang sedang dicari. Urutan bawaan adalah abjad; untuk melihat branch berdasarkan kesegarannya, --sort memakai kriteria tanggal commit:

bash
git branch --sort=-committerdate

Output yang Dihasilkan:

text
  fitur-keranjang
  fitur-desain
  fitur-laporan
* main

Tanda minus di depan committerdate berarti menurun: fitur-keranjang — branch yang paling terakhir menerima commit — naik ke baris pertama, jauh dari urutan abjad. Branch yang paling segar biasanya paling relevan; itulah urutan yang paling sering dipakai sehari-hari.

Melihat Branch Remote dan Info Tracking #

Daftar di atas belum memuat branch di remote, karena kita belum punya remote. Untuk latihan tanpa jaringan, cukup buat repository bare di folder sebelah dan daftarkan sebagai origin — teknik yang dibahas penuh di section Remote Repository :

bash
git init --bare ../toko-origin.git
git remote add origin ../toko-origin.git
git push -u origin main
git push origin fitur-keranjang

Keluaran git push -u origin main:

text
To ../toko-origin.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.

Keluaran git push origin fitur-keranjang:

text
To ../toko-origin.git
 * [new branch]      fitur-keranjang -> fitur-keranjang

Push pertama memakai -u, yang selain mengirim main juga mengikat branch lokal main ke origin/main. Push kedua mengirim fitur-keranjang tanpa -u — terkirim, tetapi tidak diikat. Sekarang daftar branch memuat dua jenis penunjuk:

bash
git branch -a

Output yang Dihasilkan:

text
  fitur-desain
  fitur-keranjang
  fitur-laporan
* main
  remotes/origin/fitur-keranjang
  remotes/origin/main

Entri remotes/origin/... adalah remote-tracking branch: penanda posisi cabang remote sebagaimana terakhir diketahui Git, dipisahkan label remotes/ dari branch lokal kita. Flag -vv melengkapi -v dengan hubungan upstream tiap branch:

bash
git branch -vv

Output yang Dihasilkan:

text
  fitur-desain    b5a28aa Tambah daftar produk
  fitur-keranjang 74926fc Catat isi keranjang
  fitur-laporan   b5a28aa Tambah daftar produk
* main            b5a28aa [origin/main] Tambah daftar produk

Hanya main yang menampilkan tanda kurung [origin/main] — bukti bahwa ikatan tracking hanya terbentuk lewat -u saat push; fitur-keranjang sudah ada di remote tetapi tidak terikat. Makna tanda kurung ini — misalnya ahead 1 saat branch lokal lebih maju dari remote — baru penting saat sinkronisasi, materi chapter Remote-Tracking Branch .

Peta Lengkap dalam Satu Layar #

Daftar branch menjawab “penunjuknya ada di mana”, tetapi belum menggambar hubungan antar-jalurnya. Tugas itu milik git log dengan tiga flag sekaligus, pola yang sudah diperkenalkan chapter Graph History :

bash
git log --oneline --decorate --graph --all

Output yang Dihasilkan:

text
* 74926fc (origin/fitur-keranjang, fitur-keranjang) Catat isi keranjang
* b5a28aa (HEAD -> main, origin/main, fitur-laporan, fitur-desain) Tambah daftar produk
* 705152c Buat README toko

Satu layar memuat seluruh cerita: commit mana yang dikepalai HEAD -> main (kombinasi penunjuk aktif dan branchnya), commit mana yang dihuni label fitur-laporan dan fitur-desain, posisi salinan remote origin/main dan origin/fitur-keranjang, serta bentuk rantainya — di repository ini masih garis lurus karena ketiga branch fitur hanya diam di tempat.

Peta sudah terbaca; saatnya menempuh perpindahan pertama. Bagaimana isi working tree bereaksi ketika penunjuk aktif berganti — berkas apa yang berubah, dan bagaimana nasib suntingan yang belum di-commit — itu pokok bahasan chapter Berpindah Branch .