git status adalah perintah yang paling sering diketik — dan seharusnya demikian: sebelum memilih atau mencatat perubahan, kita perlu tahu dulu keadaan working tree, staging area, dan posisi branch. Keluarannya memang panjang, tetapi justru ramah dibaca: setiap bagian diberi judul jelas, dan Git menyelipkan petunjuk perintah pada setiap keadaan. Chapter ini membangun empat keadaan berbeda satu per satu, membaca keluarannya tuntas, lalu mengenali format ringkas -s dan info tracking -sb.
Empat Keadaan dalam Latihan Berurutan #
Kita lanjutkan latihan pada repository yang sama — suntingan pada chapter sebelumnya sudah dipulihkan sehingga working tree kembali bersih. Keadaan pertama: satu berkas baru saja dibuat dan belum dikenal Git:
printf 'Catatan draf untuk rapat pekan depan.\n' > draf-catatan.txt
git statusOutput yang Dihasilkan:
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
draf-catatan.txt
nothing added to commit but untracked files present (use "git add" to track)Keluaran terbagi tiga bagian: baris pembuka On branch main (branch aktif), daftar Untracked files (berkas yang terlihat tapi belum dilacak), dan baris penutup yang menyimpulkan tidak ada perubahan siap di-commit. Keadaan kedua: berkas tracked disunting:
printf '# Situs Dokumentasi\n\nKumpulan catatan teknis tim.\nBagian panduan pengguna ditambahkan di halaman utama.\n' > README.md
git statusOutput yang Dihasilkan:
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
draf-catatan.txt
no changes added to commit (use "git add" and/or "git commit -a")README.md kini masuk daftar Changes not staged for commit dengan status modified — suntingan ada di working tree tetapi belum masuk staging area. Keadaan ketiga: suntingan dipilih dengan git add:
git add README.md
git statusOutput yang Dihasilkan:
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
draf-catatan.txtJudul daftar berubah menjadi Changes to be committed — isi keranjang commit berikutnya. Keadaan keempat adalah kombinasi semuanya: satu berkas lagi disunting tanpa di-git add:
printf '## Glosarium\n\n- commit: catatan satu keadaan proyek\n- staging area: keranjang perubahan terpilih\n- repository: wadah riwayat beserta berkasnya\n- working tree: salinan berkas yang sedang disunting\n' > glosarium.md
git statusOutput yang Dihasilkan:
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: README.md
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: glosarium.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
draf-catatan.txtEmpat keadaan tersebut memperlihatkan pola tetap keluaran git status: daftar selalu muncul berurutan — keranjang commit, suntingan yang belum dipilih, lalu berkas asing — dan setiap daftar hanya muncul bila isinya ada.
Membaca Petunjuk pada Keluaran #
Baris (use ...) bukan hiasan; setiapnya adalah saran perintah untuk keadaan di atasnya:
| Petunjuk pada keluaran | Artinya |
|---|---|
(use "git add <file>..." to update what will be committed) | Memasukkan suntingan berkas ke staging area |
(use "git add <file>..." to include in what will be committed) | Mulai melacak berkas untracked |
(use "git restore <file>..." to discard changes in working directory) | Membuang suntingan working tree, kembali ke snapshot |
(use "git restore --staged <file>..." to unstage) | Mengeluarkan berkas dari staging area tanpa membuang suntingannya |
Dua petunjuk terakhir memakai git restore — perintah modern sejak Git 2.23 yang menggantikan sebagian peran lama git checkout. Git versi lama menampilkan saran berbeda untuk keadaan yang sama, jadi bila keluaran di komputer pembaca tidak persis identik, isinya tetap merujuk tindakan yang setara. Pembahasan tindakan-tindakan ini beserta konsekuensinya ada di section Melacak Perubahan
.
Format Pendek dengan -s #
Keluaran lengkap memang jelas, tetapi sering kali kita hanya butuh intisarinya. Opsi -s (singkat) memampatkan tiap berkas menjadi satu baris dua kolom:
git status -sOutput yang Dihasilkan:
M README.md
M glosarium.md
?? draf-catatan.txtDua karakter pertama tiap baris adalah kode dua kolom: kolom X (kiri) melaporkan keadaan berkas pada staging area, kolom Y (kanan) melaporkan keadaannya pada working tree:
| Kode | Kolom | Arti |
|---|---|---|
M | X atau Y | Modified — berkas berubah |
A | X | Added — berkas baru yang sudah di-stage |
D | X atau Y | Deleted — berkas dihapus |
| spasi | X atau Y | Tidak ada perubahan pada area itu |
?? | dua kolom | Untracked — belum dikenal Git |
!! | dua kolom | Ignored — diabaikan lewat .gitignore |
Membaca keluaran di atas menjadi lugas: M README.md (M di kolom X, spasi di kolom Y) berarti suntingan sudah masuk staging area dan working tree tidak berubah lagi; M glosarium.md berarti suntingan hanya di working tree; ?? draf-catatan.txt berstatus untracked. Gabungan MM pada satu berkas berarti ada suntingan yang sudah di-stage disusul suntingan baru yang belum — keadaan yang dibahas pada chapter Modified, Staged, dan Committed
.
Info Tracking dengan -sb #
Opsi -s dapat digabung dengan -b untuk menambah baris info branch. Format ini paling berguna pada repository hasil git clone, karena memunculkan perbandingan posisi lokal dengan sumbernya. Pada salinan yang masih sejajar dengan sumber:
git status -sbOutput yang Dihasilkan:
## main...origin/mainBaris berawalan ## adalah baris branch: main lokal mengikuti origin/main tanpa selisih. Setelah satu commit dibuat secara lokal, selisihnya langsung terbaca:
git status -sbOutput yang Dihasilkan:
## main...origin/main [ahead 1]Label [ahead 1] berarti lokal unggul satu commit dari origin/main — satu commit yang belum terkirim ke sumber; kebalikannya, [behind 2] berarti sumber punya dua commit yang belum kita terima. Notasi ini adalah alat baca utama sebelum git push dan git pull, yang dibahas pada section Remote Repository
.
Opsi –long sebagai Bawaan #
Format bawaan git status adalah format panjang yang kita lihat sepanjang chapter ini; opsi --long memilih format itu secara eksplisit, hasilnya identik dengan git status polos. Kedua opsi format ini saling meniadakan: satu perintah hanya memakai salah satunya. Perintah dan seluruh opsinya terdokumentasi pada dokumentasi git status
.
Keadaan repository kini bisa kita baca utuh dari semua sisi: isi staging area, suntingan tersisa, berkas asing, hingga selisih dengan sumber. Langkah alami berikutnya adalah mengisi staging area itu sendiri — cara kerja git add, pola-pilihannya, dan batasannya. Lanjut ke git add
.