Keluaran git status pada chapter git status
terasa mudah dibaca karena labelnya menjelaskan diri sendiri: Untracked files, Changes not staged for commit, Changes to be committed. Label-label itu bukan sekadar teks antarmuka — di baliknya bersembunyi model yang tetap: empat keadaan berkas dan sejumlah perintah yang memindahkan berkas di antara keadaan-keadaan tersebut. Memahami siklus ini berarti dapat memprediksi isi git status sebelum perintah dijalankan, dan tahu perintah mana yang mengembalikan keadaan yang tidak diinginkan. Chapter ini membedah siklus hidup tersebut, lalu mengajak satu berkas menempuh putaran penuh — lahir sebagai berkas baru sampai kembali ke keranjang — dengan keluaran git status nyata di setiap persimpangan.
Empat Keadaan Berkas #
Setiap berkas di repository berada pada tepat satu dari empat keadaan berikut:
| Keadaan | Arti | Terlihat pada git status sebagai |
|---|---|---|
| untracked | berkas ada di folder proyek, belum pernah dicatat Git | daftar Untracked files |
| unmodified | isi berkas sama persis dengan versi terakhir yang tercatat | tidak muncul di daftar mana pun |
| modified | isi di working tree berbeda dari versi di index | Changes not staged for commit |
| staged | versi baru sudah tersimpan di index, menunggu commit | Changes to be committed |
Keadaan unmodified adalah keadaan paling sunyi: berkas yang bersih tidak pernah disebut oleh git status, karena tidak ada yang perlu dilaporkan. Justru karena senyap itulah keadaan ini sering dilupakan padahal menjadi titik kembali seluruh siklus. Keempat istilah ini juga dipakai dokumentasi resmi, jadi dokumentasi git status
enak dijadikan rujukan silang saat membaca manual.
Diagram Siklus Hidup #
Perpindahan antar keadaan mengikuti pola yang tetap:
Putaran utama siklus tersebut berjalan searah jarum jam: berkas baru lahir sebagai untracked, dipilih dengan git add menjadi staged, dicatat git commit menjadi unmodified, lalu disunting menjadi modified dan kembali dipilih menjadi staged. Satu transisi tambahan tergambar di diagram — membuang suntingan mengembalikan berkas modified ke unmodified — dan beberapa jalur ke luar lainnya kita bahas setelah demo.
Satu Berkas Menempuh Putaran Penuh #
Kita siapkan repository latihan segar berisi satu commit, lalu mengikuti sebuah berkas baru menempuh seluruh siklus:
mkdir latihan-status && cd latihan-status
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf '# Situs Dokumentasi\n\nKumpulan catatan teknis tim.\n' > README.md
git add README.md
git commit -m "Commit awal situs dokumentasi"Lahir sebagai Untracked #
Berkas baru selalu lahir tanpa dikenal Git:
printf '# Panduan Kontributor\n\nAlur dasar berkontribusi di proyek ini.\n' > panduan.md
git statusOutput yang Dihasilkan:
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
panduan.md
nothing added to commit but untracked files present (use "git add" to track)Baris penutupnya lugas: tidak ada yang siap di-commit, hanya berupa berkas yang belum dilacak (use "git add" to track). Git melihat keberadaan panduan.md di folder, tetapi belum diminta mengawasi isinya.
Terpilih menjadi Staged #
Perintah git add memindahkan berkas ke keranjang:
git add panduan.md
git statusOutput yang Dihasilkan:
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: panduan.mdUntuk berkas yang baru pertama kali masuk keranjang, Git memakai label new file: — bukan modified: — karena yang dibandingkan index dengan HEAD adalah keberadaan berkas itu sendiri. Petunjuk (use "git restore --staged <file>..." to unstage) mengingatkan bahwa pilihan ini bisa dibatalkan tanpa menghapus berkas.
Tercatat menjadi Unmodified #
Commit memindahkan isi keranjang ke riwayat:
git commit -m "Tambah panduan kontributor"Output yang Dihasilkan:
[main f959231] Tambah panduan kontributor
1 file changed, 3 insertions(+)
create mode 100644 panduan.mdgit statusOutput yang Dihasilkan:
On branch main
nothing to commit, working tree cleanInilah keadaan unmodified versi paling ekstrem: tidak ada satu pun berkas yang perlu dilaporkan, seluruh isi working tree sama dengan snapshot terakhir. Hash f959231 dihitung dari isi dan waktu commit, sehingga nilainya berbeda di komputer pembaca.
Disunting menjadi Modified #
Penyuntingan di editor memutus kesamaan itu:
printf '# Panduan Kontributor\n\nAlur dasar berkontribusi di proyek ini.\nKontributor baru disarankan membaca glosarium terlebih dahulu.\n' > panduan.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: panduan.md
no changes added to commit (use "git add" and/or "git commit -a")Label kembali menjadi modified — berkas sudah dikenal Git (pernah masuk snapshot), hanya isinya yang kini menyimpang dari index.
Kembali ke Keranjang #
Putaran ditutup dengan git add yang sama seperti pada transisi pertama:
git add panduan.md
git statusOutput yang Dihasilkan:
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: panduan.mdPerhatikan perbedaan halus dengan transisi sebelumnya: labelnya kini modified: bukan new file:, karena yang berbeda kini isinya, bukan keberadaannya. Setelah commit kedua ini dibuat, perjalanan berkas dapat dilihat utuh di riwayat:
git commit -m "Sarankan baca glosarium sebelum kontribusi"Output yang Dihasilkan:
[main 31c19c0] Sarankan baca glosarium sebelum kontribusi
1 file changed, 1 insertion(+)git log --onelineOutput yang Dihasilkan:
31c19c0 Sarankan baca glosarium sebelum kontribusi
f959231 Tambah panduan kontributor
849aa8b Commit awal situs dokumentasiJalur ke Luar Putaran Utama #
Diagram di awal chapter memuat putaran utama; ada beberapa transisi lain yang sama pentingnya:
- modified → unmodified — membuang suntingan dan kembali ke versi terakhir yang tercatat, dibahas pada chapter Membuang Perubahan Lokal dan Memulihkan File .
- staged → modified atau untracked — mengeluarkan berkas dari keranjang tanpa membuang suntingannya lewat
git restore --staged, topik utama chapter Membatalkan Staging . - unmodified → untracked — berhenti melacak berkas yang tetap ingin dipertahankan di disk, dilakukan dengan
git rm --cacheddan dibahas pada chapter git rm .
Mengenal keadaan-keadaan ini juga memberi nama pada kebutuhan kita: “berkas ini masih untracked” atau “suntingan ini belum staged” adalah kalimat yang menuntun ke perintah yang tepat. Satu pemisahan mendasar masih perlu dibedah — perbedaan antara berkas yang dilacak dan yang tidak, beserta konsekuensi nyatanya bagi commit dan pemulihan. Lanjut ke Untracked dan Tracked Files .