Setiap perubahan pada proyek Git melewati tiga area sebelum menjadi bagian riwayat: working directory, staging area, dan repository. Topik ini membahas tiga area tersebut beserta alur berkas di antaranya, karena hampir setiap perintah Git sehari-hari adalah perintah pemindah keadaan berkas dari satu area ke area lain. Peta ini juga menjelaskan mengapa git add dan git commit selalu muncul berpasangan.
Working directory#
Working directory adalah folder proyek yang terlihat di pengelola berkas dan editor, yaitu tempat berkas diedit, ditambahkan, dan dihapus. Keadaan area ini adalah keadaan kerja saat ini, dan Git membandingkannya dengan dua keadaan lain untuk mengetahui apa yang berubah. Berkas yang belum pernah dicatat Git disebut untracked, sedangkan berkas yang sudah menjadi bagian riwayat disebut tracked.
Perubahan pada working directory bersifat sementara. Tanpa catatan Git, sebuah perubahan hanyalah keadaan berkas di disk yang dapat hilang tanpa jejak. Kontrol versi baru berlaku setelah perubahan itu dipindahkan ke area berikutnya.
Staging area#
Staging area, yang di dalam Git juga disebut index, adalah area draf untuk commit berikutnya. Berkas dipindahkan ke sini dengan git add, dan isi yang berada di staging area pada saat git commit dijalankan itulah yang menjadi isi commit tersebut. Dengan kata lain, commit tidak mengambil seluruh isi working directory, melainkan hanya isi staging area.
Keberadaan area ini memberi kekuatan penyusunan. Sebuah perubahan besar dapat dipecah menjadi beberapa commit yang masing-masing berisi satu gagasan: git add dipanggil pada beberapa berkas yang saling berkaitan, lalu commit dibuat, dan sisanya ditstaging pada putaran berikutnya. Berkas yang belum selesai diedit dapat dibiarkan di working directory tanpa ikut terbawa.
Repository#
Repository adalah basis data riwayat yang tersimpan di subfolder .git. Perintah git commit mengubah isi staging area menjadi objek commit baru yang menunjuk snapshot proyek pada saat itu. Commit yang sudah dibuat menjadi bagian riwayat yang dapat ditelusuri, dibandingkan, dan dipanggil kembali, dan tidak lagi berubah secara diam-diam.
Alur berkas antar area#
Alurnya dapat dipraktikkan pada folder latihan. Tanggal commit pada contoh ditetapkan melalui variabel lingkungan agar hash pada keluaran dapat direproduksi secara persis. Mulailah dari repository kosong, lalu buat berkas baru dan amati keadaannya di setiap tahap.
# tanggal commit ditetapkan agar keluaran contoh dapat direproduksi secara persis
export GIT_AUTHOR_DATE="2026-11-01T09:00:00+07:00"
export GIT_COMMITTER_DATE="2026-11-01T09:00:00+07:00"rm -rf /tmp/lab-tiga
mkdir /tmp/lab-tiga
cd /tmp/lab-tiga
git init -b main
printf "Menu pertama.\n" > menu.txt
git statusInitialized empty Git repository in /tmp/lab-tiga/.git/
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
menu.txt
nothing added to commit but untracked files present (use "git add" to track)Berkas menu.txt berada di working directory dengan status untracked. Pindahkan ke staging area, lalu commit.
git add menu.txt
git statusOn branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: menu.txtSeksi Changes to be committed menunjukkan bahwa menu.txt sudah berada di staging area dan akan menjadi isi commit berikutnya. Tuntaskan siklusnya.
git config user.name "Budi"
git config user.email "[email protected]"
git commit -m "Tambah menu pertama"
git status[main (root-commit) fc9ff49] Tambah menu pertama
1 file changed, 1 insertion(+)
create mode 100644 menu.txt
On branch main
nothing to commit, working tree cleanPesan working tree clean menyatakan ketiga area berada dalam keadaan serupa: tidak ada perubahan yang menggantung di staging area maupun working directory. Siklus edit, git add, dan git commit itulah siklus kerja harian pada Git, dan setiap putarannya menambah satu commit pada riwayat.
Ringkasan#
- Working directory adalah keadaan berkas saat ini, staging area (index) adalah draf commit berikutnya, dan repository adalah basis data riwayat di
.git. git addmemindahkan perubahan dari working directory ke staging area, sedangkangit commitmengubah isi staging area menjadi commit.- Staging area memungkinkan satu pekerjaan dipecah menjadi beberapa commit yang masing-masing berisi satu gagasan.
Referensi#
- Recording Changes to the Repository — Pro Git — bab Pro Git yang memperkenalkan tiga area dan siklus add-commit.
- gitglossary — Git Documentation — definisi resmi istilah index, working tree, dan commit.