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:

bash
printf 'Catatan draf untuk rapat pekan depan.\n' > draf-catatan.txt
git status

Output yang Dihasilkan:

text
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:

bash
printf '# Situs Dokumentasi\n\nKumpulan catatan teknis tim.\nBagian panduan pengguna ditambahkan di halaman utama.\n' > README.md
git status

Output yang Dihasilkan:

text
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:

bash
git add README.md
git status

Output yang Dihasilkan:

text
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.txt

Judul daftar berubah menjadi Changes to be committed — isi keranjang commit berikutnya. Keadaan keempat adalah kombinasi semuanya: satu berkas lagi disunting tanpa di-git add:

bash
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 status

Output yang Dihasilkan:

text
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.txt

Empat 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 keluaranArtinya
(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:

bash
git status -s

Output yang Dihasilkan:

text
M  README.md
 M glosarium.md
?? draf-catatan.txt

Dua 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:

KodeKolomArti
MX atau YModified — berkas berubah
AXAdded — berkas baru yang sudah di-stage
DX atau YDeleted — berkas dihapus
spasiX atau YTidak ada perubahan pada area itu
??dua kolomUntracked — belum dikenal Git
!!dua kolomIgnored — 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:

bash
git status -sb

Output yang Dihasilkan:

text
## main...origin/main

Baris berawalan ## adalah baris branch: main lokal mengikuti origin/main tanpa selisih. Setelah satu commit dibuat secara lokal, selisihnya langsung terbaca:

bash
git status -sb

Output yang Dihasilkan:

text
## 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 .