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:
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):
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:
git checkout mainOutput yang Dihasilkan:
Switched to branch 'main'git checkout fitur-rapatOutput yang Dihasilkan:
Switched to branch 'fitur-rapat'Keluarannya mirip git switch sampai ke tanda petiknya — bukan kebetulan: switch sengaja mempertahankan format ini agar migrasi terasa mulus.
Menurunkan HEAD dengan checkout hash #
Bentuk paling khas warisan ini adalah checkout langsung pada hash commit — tanpa nama branch. Riwayat repo latihan berbunyi:
git log --onelineOutput yang Dihasilkan:
8fce155 Catat menit rapat
56fea4f Tambah agenda review
fe5e0ff Buat agenda proyekKita turun ke commit tengah memakai hash singkatnya — di mesin pembaca, ambil hash dari keluaran git log milik sendiri:
git checkout 56fea4fOutput yang Dihasilkan:
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 reviewKeluaran 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:
git statusOutput yang Dihasilkan:
HEAD detached at 56fea4f
nothing to commit, working tree cleanBentuk 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:
git checkout mainOutput yang Dihasilkan:
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:
| Tugas | Perintah modern (Git ≥ 2.23) | Bentuk warisan |
|---|---|---|
| Berpindah branch | git switch main | git checkout main |
| Membuat branch + pindah | git switch -c fitur | git checkout -b fitur |
| Menengok commit lama | git switch --detach <hash> | git checkout <hash> |
| Membuang suntingan berkas | git restore <berkas> | git checkout -- <berkas> |
| Membatalkan staging | git 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
.