Sepanjang dua chapter terakhir kita memakai git switch seolah sudah akrab — waktunya membahas perintah itu sendiri. git switch lahir dari keluhan lama: sebelum ia ada, seluruh pekerjaan berpindah branch ditangani git checkout, satu perintah yang juga mengurus membuat branch, membuang suntingan berkas, dan menurunkan HEAD ke commit mana pun. Chapter ini mengulas bentuk-bentuk git switch satu per satu — pindah, buat sekaligus pindah, mulai dari titik lama, kembali ke branch sebelumnya, dan menengok commit lama tanpa branch — lalu menutup dengan satu pintu darurat yang perlu diperlakukan hati-hati.

Mengapa checkout Dipecah Dua #

git checkout main terdengar jelas, tetapi git checkout -- berita.md sama sekali bukan perpindahan branch — ia membuang suntingan. Dalam satu kata kerja, Git menumpuk empat pekerjaan berbeda, dan salah ketik bisa berakibat hilangnya pekerjaan. Git 2.23 (dirilis Agustus 2019) memecahnya menjadi dua perintah yang masing-masing fokus: git switch mengurus branch, git restore mengurus isi berkas — pembagian tugas yang sudah kita pakai diam-diam di chapter Berpindah Branch . Mesin uji materi ini menjalankan Git 2.47.3, jadi seluruh bentuk switch tersedia; rincian resminya ada di git-scm.com/docs/git-switch .

Pindah Branch dan Membuat Sekaligus Pindah #

Repository latihan kita siapkan dengan dua commit di main dan satu branch kerja:

bash
mkdir latihan-switch && cd latihan-switch
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf 'Log hari 1: setup\n' > log.md
git add log.md
git commit -m "Mulai log proyek"
printf 'Log hari 1: setup\nLog hari 2: stabil\n' > log.md
git add log.md
git commit -m "Catat hari kedua"
git switch -c fitur-arsip
printf 'arsip-2026.txt\n' > arsip.md
git add arsip.md
git commit -m "Tambah berkas arsip"

Output yang Dihasilkan (perintah git switch -c fitur-arsip):

text
Switched to a new branch 'fitur-arsip'

Bentuk -c sudah kita pakai berulang kali: buat branch fitur-arsip pada commit saat ini, lalu pindah ke sana. Sekarang kita kembali ke main:

bash
git switch main

Output yang Dihasilkan:

text
Switched to branch 'main'

Dua keluaran itu pola dasar switch: “Switched to a new branch ‘…’” ketika branch baru ikut dibuat, dan “Switched to branch ‘…’” untuk perpindahan biasa. Jika nama branch salah ketik, Git menolak dengan saran nama terdekat, bukan menebak-nebak — perilaku yang membuat switch aman untuk kebiasaan sehari-hari.

Mulai dari Titik Lama dan Kembali ke Branch Sebelumnya #

Branch baru tidak harus berangkat dari commit terbaru. Kita buat dua branch lagi — satu dari posisi sekarang, satu dari commit pertama memakai notasi HEAD~1 dari chapter Anatomi Commit :

bash
git switch -c fitur-draf

Output yang Dihasilkan:

text
Switched to a new branch 'fitur-draf'
bash
git switch -c fitur-lama HEAD~1

Output yang Dihasilkan:

text
Switched to a new branch 'fitur-lama'
bash
git branch --show-current

Output yang Dihasilkan:

text
fitur-lama

Kini kita berdiri di fitur-lama — branch yang menunjuk commit “Mulai log proyek” — dan working tree kita ikut mundur: log.md kembali dua barisnya yang pertama. Tanda hubung tunggal mengembalikan kita ke branch sebelumnya, mirip cd - di shell:

bash
git switch -

Output yang Dihasilkan:

text
Switched to branch 'fitur-draf'
bash
git branch --show-current

Output yang Dihasilkan:

text
fitur-draf

git switch - membaca @{-1}, entri terakhir pada riwayat perpindahan HEAD (reflog), sehingga Git tahu kita datang dari fitur-draf. Bolak-balik dua branch saat membandingkan pekerjaan menjadi satu ketukan singkat.

Menengok Commit Lama dengan –detach #

Perhatikan commit lama tanpa membuat branch? --detach memindahkan HEAD langsung ke sebuah commit, melewati branch:

bash
git switch --detach HEAD~1

Output yang Dihasilkan:

text
HEAD is now at c6c3c21 Mulai log proyek
bash
git status

Output yang Dihasilkan:

text
HEAD detached at c6c3c21
nothing to commit, working tree clean

Statusnya terbaca jujur: HEAD detached at c6c3c21 — HEAD tidak lagi menempel pada branch mana pun, melainkan menunjuk commit itu sendiri. Kondisi detached HEAD ini berguna untuk meneliti keadaan proyek di masa lalu, tetapi commit yang dibuat dalam kondisi ini tidak punya branch penampung dan rawan tergulung bersih oleh garbage collector. Cara pulangnya sederhana:

bash
git switch main

Output yang Dihasilkan:

text
Previous HEAD position was c6c3c21 Mulai log proyek
Switched to branch 'main'

Perilaku detached HEAD — risikonya, menyelamatkan commit yang kehilangan penunjuk, dan hubungannya dengan reflog — dibahas tuntas di chapter Menangani Detached HEAD dan HEAD dan Detached HEAD .

Pintu Darurat –discard-changes #

Satu varian terakhir perlu disebut karena bahaya justru letaknya: git switch --discard-changes main memindahkan branch dan membuang suntingan lokal yang menabrak, melewati penolakan yang kita alami di chapter Berpindah Branch . Tidak ada dialog konfirmasi — suntingan hilang begitu perintah dijalankan.

Empat kebiasaan git switch kini lengkap di tangan kita: pindah, buat-sekaligus-pindah, kembali ke sebelumnya, dan menengok masa lalu. Tetap ada satu alasan mempelajari git checkout: sebagian besar dokumentasi, tutorial, dan skrip lama di luar sana masih menulis git checkout — dan kita perlu membacanya tanpa salah tafsir. Chapter berikutnya mengupas perintah warisan itu dan membandingkan pasangan modernnya: git checkout .