Tiga area

Tiga area kerja Git: working directory, staging area (index), dan repository, beserta alur berkas di antaranya.

Daftar isi

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#

Alur berkas melintasi tiga area GitWorking directoryberkas yang dieditStaging area (index)draf commitRepository (.git)riwayat commitgit addgit commit
Alur berkas melintasi tiga area Git

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.

bash
# 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"
bash
rm -rf /tmp/lab-tiga
mkdir /tmp/lab-tiga
cd /tmp/lab-tiga
git init -b main
printf "Menu pertama.\n" > menu.txt
git status
text Keluaran
Initialized 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.

bash
git add menu.txt
git status
text Keluaran
On branch main

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   menu.txt

Seksi Changes to be committed menunjukkan bahwa menu.txt sudah berada di staging area dan akan menjadi isi commit berikutnya. Tuntaskan siklusnya.

bash
git config user.name "Budi"
git config user.email "[email protected]"
git commit -m "Tambah menu pertama"
git status
text Keluaran
[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 clean

Pesan 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 add memindahkan perubahan dari working directory ke staging area, sedangkan git commit mengubah isi staging area menjadi commit.
  • Staging area memungkinkan satu pekerjaan dipecah menjadi beberapa commit yang masing-masing berisi satu gagasan.

Referensi#