Buka dokumentasi proyek mana pun yang berumur lebih dari lima tahun, dan peluang besar kita menemukan git checkout di sana. Perintah ini adalah cara resmi berpindah branch selama lima belas tahun pertama Git — satu kata kerja untuk empat pekerjaan berbeda. Materi Course ini mengajarkan git switch dan git restore sebagai kebiasaan utama, tetapi membaca — dan pada kasus tertentu menjalankan — git checkout tetap keahlian wajib. Chapter ini menguji bentuk-bentuknya yang paling sering dijumpai di tutorial lama, lalu menutup dengan tabel terjemahan menuju pasangan modernnya.

Empat Topi Satu Perintah #

Empat pekerjaan yang disandang git checkout: berpindah branch, membuat branch sekaligus pindah, menurunkan HEAD ke sebuah commit, dan membuang suntingan berkas. Perintah modern memecahnya bersih — git switch untuk dua yang pertama dan git restore untuk yang terakhir — namun checkout tetap menjalankan semuanya hingga kini. Repository latihan kita susun seperti biasa:

bash
mkdir latihan-checkout && cd latihan-checkout
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf '# Agenda\n1. kick off\n' > agenda.md
git add agenda.md
git commit -m "Buat agenda proyek"
printf '# Agenda\n1. kick off\n2. review desain\n' > agenda.md
git add agenda.md
git commit -m "Tambah agenda review"
git checkout -b fitur-rapat
printf 'Peserta: Budi, Siti\nTopik: arah produk\n' > rapat.md
git add rapat.md
git commit -m "Catat menit rapat"

Output yang Dihasilkan (perintah git checkout -b fitur-rapat):

text
Switched to a new branch 'fitur-rapat'

-b adalah bentuk lawas switch -c: buat branch lalu langsung pindah. Kita sudah punya dua jalur — main dua commit, fitur-rapat tiga commit. Berpindah di antara keduanya dengan checkout:

bash
git checkout main

Output yang Dihasilkan:

text
Switched to branch 'main'
bash
git checkout fitur-rapat

Output yang Dihasilkan:

text
Switched to branch 'fitur-rapat'

Keluarannya mirip git switch sampai ke tanda petiknya — bukan kebetulan: switch sengaja mempertahankan format ini agar migrasi terasa mulus.

Bentuk paling khas warisan ini adalah checkout langsung pada hash commit — tanpa nama branch. Riwayat repo latihan berbunyi:

bash
git log --oneline

Output yang Dihasilkan:

text
8fce155 Catat menit rapat
56fea4f Tambah agenda review
fe5e0ff Buat agenda proyek

Kita turun ke commit tengah memakai hash singkatnya — di mesin pembaca, ambil hash dari keluaran git log milik sendiri:

bash
git checkout 56fea4f

Output yang Dihasilkan:

text
Note: switching to '56fea4f'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 56fea4f Tambah agenda review

Keluaran panjang ini layak dibedah pelan-pelan. Baris pertama, Note: switching to '56fea4f'., mengumumkan bahwa yang dituju bukan branch. Paragraf berikutnya menjelaskan kondisi detached HEAD: kita boleh melihat-lihat dan bahkan membuat commit eksperimental, dan commit itu dapat dibuang tanpa mengganggu branch mana pun — asalkan tidak kembali ke branch sebelum menyelamatkannya. Git lalu menawarkan dua pintu: git switch -c <nama-baru> untuk mengangkat commit-commit eksperimen menjadi branch, atau git switch - untuk membatalkan perpindahan. Baris penutupnya, HEAD is now at 56fea4f Tambah agenda review, menyatakan posisi akhir. git status menegaskan keadaannya:

bash
git status

Output yang Dihasilkan:

text
HEAD detached at 56fea4f
nothing to commit, working tree clean

Bentuk modern dari trik yang sama adalah git switch --detach, yang kita coba di chapter git switch — keluarannya jauh lebih pendek karena nasihat panjang itu kini diberikan sekali saja, bukan setiap kali pindah. Kepulangan tetap satu pintu:

bash
git checkout main

Output yang Dihasilkan:

text
Switched to branch 'main'

Membuang Suntingan dengan checkout – #

Bentuk ketiga, git checkout -- <berkas>, membuang suntingan working tree dan mengembalikan berkas ke versi commit — perilaku git restore <berkas> yang sudah kita bahas tuntas di chapter Membuang Perubahan Lokal . Tidak ada perilaku baru untuk diuji di sini; yang perlu diingat hanya kebiasaan bacanya: tanda -- pemisah itu menandakan argumen berikutnya adalah berkas, bukan branch — sehingga git checkout -- agenda.md tidak akan pernah berpindah branch walau ada branch bernama sama.

Tabel Terjemahan: switch/restore vs checkout #

Ketika menemukan checkout di tutorial lama, terjemahkan ke pasangan modernnya:

TugasPerintah modern (Git ≥ 2.23)Bentuk warisan
Berpindah branchgit switch maingit checkout main
Membuat branch + pindahgit switch -c fiturgit checkout -b fitur
Menengok commit lamagit switch --detach <hash>git checkout <hash>
Membuang suntingan berkasgit restore <berkas>git checkout -- <berkas>
Membatalkan staginggit restore --staged <berkas>git reset HEAD <berkas>

Untuk tim yang baru mulai, kesepakatan sederhana paling aman: tulis dan ajarkan bentuk switch/restore, baca checkout sebagai bahasa lama. Dokumentasi resmi masing-masing perintah ada di git-scm.com/docs/git-switch dan git-scm.com/docs/git-checkout .

Perbendaharaan perpindahan kita kini lengkap — tua dan modern. Satu babak penting belum dimainkan: apa yang sebenarnya terjadi pada riwayat ketika kita bekerja di dua branch dan commit di keduanya? Jawabannya adalah inti percabangan itu sendiri, dan pembuktiannya nyata: dua git log yang berbeda isi dari satu repository yang sama — itu materi chapter Branch dan Commit .