Belajar Git - Konsep Dasar & Arsitektur Utama Git
Episode 2 of 21

Belajar Git - Konsep Dasar & Arsitektur Utama Git

Arsitektur inti Git: tiga area (working directory, staging area, repository), area stash, model snapshot, objek blob, tree, commit, serta peran hash SHA-1 dan SHA-256 sebagai ID unik.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 1 kita memahami kenapa Git ada: menggantikan arsip manual dan VCS terpusat dengan sistem yang cepat, offline, dan menjamin integritas data. Sekarang kita bedah bagaimana Git bekerja di dalam.

Pemahaman arsitektur ini bukan teori kosong. Semua perintah yang akan kalian pakai — git add, git commit, git stash, git restore — bekerja dengan memindahkan file antar area yang berbeda. Begitu kalian paham area-areanya, perilaku setiap perintah menjadi logis dan mudah ditebak.

Tiga Area Utama Git (Three States)

Setiap file dalam repository Git selalu berada di salah satu dari tiga area berikut.

Working Directory

Area tempat kalian mengedit file — folder proyek yang terlihat dan dibuka di editor. Perubahan yang baru dibuat di sini belum "dikenal" Git.

Staging Area (Index)

Area perantara yang menyimpan snapshot dari perubahan yang siap di-commit. Di sinilah kalian menyusun apa saja yang masuk ke commit berikutnya. Staging Area disebut juga Index dan direpresentasikan file index di dalam folder .git.

Repository (.git)

Area penyimpanan permanen seluruh riwayat commit — database Git di dalam folder tersembunyi .git. Setelah sebuah commit dibuat, datanya ada di sini dan menjadi bagian dari sejarah.

Alur File Antar Area

Status file di tiga area
git status --short
 M README.md
A  fitur-baru.js
?? catatan.txt

Cara membaca status di atas:

  • M README.md — file berubah di working directory, belum di-stage.
  • A fitur-baru.js — file sudah masuk staging area, siap di-commit.
  • ?? catatan.txt — file baru belum pernah dikenali Git (untracked).

Perintah untuk berpindah antar area:

  • Working → Staging: git add <file>
  • Staging → Repository: git commit -m "pesan"
  • Staging → Working: git restore --staged <file>
  • Repository → Working: git restore <file>

Bonus: Area Stash

Stash adalah "lemari penyimpanan sementara" di luar ketiga area utama. Gunakan saat harus pindah konteks mendadak (misal berpindah branch) padahal pekerjaan belum selesai. Perintah git stash menyimpan perubahan sementara dan membersihkan working directory; git stash pop mengembalikannya. Detail lengkapnya akan kita bahas di episode 15.

Di Balik Layar: Snapshot, Bukan Delta

Ini salah satu hal paling membedakan Git dari VCS lain. Subversion menyimpan delta — catatan perbedaan antar versi. Git menyimpan snapshot — kondisi lengkap seluruh file proyek pada saat commit.

Jika tidak ada file yang berubah antar dua commit, Git tidak menyimpan salinan duplikat — ia cukup menunjuk ulang ke snapshot sebelumnya. Hasilnya: mengembalikan commit lama semudah menunjuk ke snapshot, tanpa perlu "menggabungkan delta" satu per satu.

Objek-Objek Dasar Git

Semua data Git tersimpan sebagai objek dalam database di folder .git/objects. Ada empat tipe yang wajib kalian kenal.

Blob

Blob (Binary Large Object) adalah isi murni sebuah file — tanpa nama file dan tanpa metadata. Dua file berbeda dengan isi yang sama akan berbagi blob yang sama; ini dasar dari deduplikasi penyimpanan Git.

Tree

Tree adalah representasi sebuah direktori: daftar nama file beserta blob yang dipetakan, atau subdirektori yang direpresentasikan tree lain. Inilah yang menghubungkan blob menjadi struktur folder yang sebenarnya.

Commit

Commit adalah objek paling penting: ia menyimpan metadata — penulis, committer, timestamp, pesan — beserta pointer ke tree yang mewakili kondisi snapshot saat itu, plus pointer ke commit induk (parent). Rantai pointer inilah yang membentuk sejarah.

Anatomi sebuah commit
commit 3f2a1b0c
author  Arman Dwi Pangestu <arman@kalian.com>
message  feat: tambah halaman login
tree  b8d4e7f1
parent  9c4a2d6e

Annotated Tag

Tag adalah label untuk commit tertentu, biasa dipakai menandai versi rilis (v1.2.3). Tag annotated menyimpan metadata tambahan — pesan dan penandatangan — dan menjadi objek Git sendiri, berbeda dari lightweight tag yang hanya sekadar pointer tanpa metadata. Detail di episode 20.

Hash sebagai ID Unik

Setiap objek Git — blob, tree, commit, tag — diberi identitas berupa hash kriptografis dari isinya, menggunakan SHA-1 (40 karakter hex) dan kini mulai beralih ke SHA-256 (64 karakter).

Hash berfungsi ganda:

  • ID unik — objek dirujuk dan dicari lewat hash-nya (contoh a1b2c3d).
  • Jaminan integritas — isi objek itulah yang di-hash; ubah satu karakter, hash berubah total dan Git langsung mendeteksi korupsi atau manipulasi.
Menghitung hash isi file
echo "selamat datang" > README.md
git hash-object README.md
f2c3d4e5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1

Tip

Coba jalankan git hash-object <file> pada file yang sama dua kali — hash-nya selalu sama. Inilah prinsip deduplikasi: file identik di mana pun lokasinya hanya disimpan sekali oleh Git.

Penutup

Rekap episode 2:

  • Tiga area: working directory (edit), staging area (susun), repository (simpan permanen), plus stash sebagai penyimpan sementara.
  • Git menyimpan snapshot, bukan delta — efisien dan cepat dipulihkan.
  • Objek dasar: blob (isi file), tree (struktur folder), commit (sejarah), dan annotated tag.
  • Hash SHA-1 / SHA-256 berfungsi sebagai ID sekaligus pengaman integritas.

Di episode 3 kita mulai praktik sungguhan: menginisialisasi repository dengan git init, membaca status file dengan git status, menandai file untracked dan staged, hingga menyusun .gitignore. Kalian sudah punya fondasi yang kuat — sekarang saatnya tangan mengetik. Sampai jumpa!