Dua kata akan muncul di hampir setiap halaman Course ini: repository dan commit. Keduanya adalah bangunan utama Git — repository menjadi wadah sekaligus database riwayat, sedangkan commit menjadi unit pencatatan yang menyusun riwayat itu. Pada chapter ini kita mendefinisikan keduanya secara konkret, berkenalan dengan identitas unik tiap commit berupa hash, lalu menjalankan contoh dua commit sungguhan di repositori latihan dan membaca keluarannya sampai ke metadata di dalamnya. Setelah chapter ini, seluruh istilah pada peta Course tinggal dikenali tanpa perlu diterka.

Repository: Working Tree dan Database .git #

Repository Git adalah satu kesatuan yang terdiri dari dua bagian: working tree — berkas-berkas proyek yang kita lihat dan sunting sehari-hari — dan folder tersembunyi .git yang berfungsi sebagai database riwayat. Aliran di antara keduanya sudah kita bedah pada chapter Cara Kerja Git ; kini kita lihat isinya.

Folder .git memuat seluruh mesin Git: direktori objects yang menyimpan seluruh snapshot dan struktur riwayat, direktori refs yang menyimpan penunjuk posisi branch dan tag, berkas HEAD yang mencatat posisi kita saat ini, serta berkas config untuk pengaturan repositori. Bedah isi folder ini satu per satu dilakukan pada section Dasar Repository .

Commit: Snapshot Beserta Metadata #

Commit adalah catatan satu keadaan proyek pada satu titik waktu. Isinya dua bagian: snapshot berkas yang dilacak, dan metadata yang menjelaskan konteksnya — siapa pembuatnya (nama dan surel), kapan dibuat (waktu penulis dan pencatat), pesan penjelas, serta parent berupa identitas commit sebelumnya. Rangkaian rujukan parent inilah yang menghubungkan commit-commit menjadi sejarah yang bisa ditelusuri maju-mundur.

Pengantar Hash Commit #

Identitas setiap commit adalah hash — deretan 40 karakter heksadesimal yang dihitung dari seluruh isi dan metadata commit tersebut, sebagaimana dibahas pada chapter Mengenal Git tentang checksum SHA-1. Karakteristik pentingnya:

  • Hash dipakai sebagai nama resmi commit; bentuk pendek tujuh karakter seperti 3c2563c sudah cukup untuk merujuknya dalam kebanyakan perintah.
  • Hash yang sama selalu berarti isi yang sama; isi yang berubah menghasilkan hash yang berbeda.
  • Hash di mesin kita pasti berbeda dengan hash pada contoh Course, karena dihitung juga dari waktu dan identitas pembuatnya. Jangan heran bila keluaran pembaca tidak sama karakter demi karakter.

Karena hash dihitung dari isi, hash bukan nomor urut: commit terbaru bisa saja berada “di tengah” struktur riwayat yang bercabang. Bedah selanjutnya tentang hash dan berbagai cara merujuk commit ada di chapter Commit Hash dan References .

Membuat Dua Commit Pertama #

Kita jalankan contoh nyata: repositori latihan segar, dua commit, lalu membaca riwayatnya.

Menyiapkan Repositori Latihan #

bash
git init -b main

Output yang Dihasilkan:

text
Initialized empty Git repository in /home/z/my-project/tutorial-extracted/work/sandbox/pengantar-git/.git/

Jalur pada keluaran menyesuaikan lokasi direktori masing-masing. Repositori latihan ini memakai identitas lokal Budi Santoso <[email protected]>; penyetelan identitas dibahas pada section Instalasi dan Konfigurasi .

Commit Pertama #

Buat berkas daftar bacaan berisi satu baris, pilih ke staging area, lalu catat:

bash
printf 'Pro Git - bab 1 dan 2\n' > daftar-bacaan.md
git add daftar-bacaan.md
git commit -m "Tambah daftar bacaan awal"

Output yang Dihasilkan:

text
[main (root-commit) 8952dfb] Tambah daftar bacaan awal
 1 file changed, 1 insertion(+)
 create mode 100644 daftar-bacaan.md

Label root-commit menandai commit pertama pada repositori; karena belum ada commit sebelumnya, commit ini tidak memiliki parent.

Commit Kedua #

Tambahkan satu baris pada berkas yang sama, lalu ulangi siklus pilih dan catat:

bash
printf 'Pro Git - bab 1 dan 2\nGittutorial dari git-scm.com\n' > daftar-bacaan.md
git add daftar-bacaan.md
git commit -m "Tambah rujukan gittutorial"

Output yang Dihasilkan:

text
[main 3c2563c] Tambah rujukan gittutorial
 1 file changed, 1 insertion(+)

Perhatikan dua hal pada keluaran di atas: label main tanpa root-commit menandakan commit kedua, dan ringkasan perubahan menyebut satu berkas berubah dengan satu baris tambahan — isi snapshot kini memuat dua baris.

Membaca Riwayat #

Perintah paling ringkas untuk melihat riwayat adalah git log --oneline:

bash
git log --oneline

Output yang Dihasilkan:

text
3c2563c Tambah rujukan gittutorial
8952dfb Tambah daftar bacaan awal

Dua baris itu adalah seluruh sejarah repositori, ditampilkan dari yang terbaru. Setiap baris berpasangan: hash pendek di kiri dan pesan commit di kanan. Hash pembaca pasti berbeda dengan hash di atas — ingat, hash dihitung dari isi sekaligus waktu dan identitas pembuatnya.

Mengintip Metadata Commit #

Format git log tanpa opsi memperlihatkan metadata dalam bentuk yang mudah dibaca:

bash
git log

Output yang Dihasilkan:

text
commit 3c2563c424beb513157f21e57a69718b003a9315
Author: Budi Santoso <[email protected]>
Date:   Tue Oct 13 09:30:00 2026 +0700

    Tambah rujukan gittutorial

commit 8952dfbb325ebffda6b043df5cd266bdaaf26372
Author: Budi Santoso <[email protected]>
Date:   Tue Oct 13 09:00:00 2026 +0700

    Tambah daftar bacaan awal

Setiap entri memuat hash lengkap 40 karakter, penulis, waktu, dan pesan commit. Git juga menyediakan jendela untuk melihat bentuk mentah objek tersebut — perintah plumbing git cat-file -p HEAD membuka isi commit terakhir apa adanya:

bash
git cat-file -p HEAD

Output yang Dihasilkan:

text
tree 6c75ad937be95e6f074824ae4ea360706f7c3067
parent 8952dfbb325ebffda6b043df5cd266bdaaf26372
author Budi Santoso <[email protected]> 1791858600 +0700
committer Budi Santoso <[email protected]> 1791858600 +0700

Tambah rujukan gittutorial

Baris-baris tersebut adalah metadata commit yang sesungguhnya (perintah ini dijelaskan pada dokumentasi git cat-file ): tree menunjuk isi snapshot pada titik waktu itu, parent menunjuk commit pertama (hash 8952dfb... yang juga terlihat pada git log di atas), lalu penulis dan pencatat beserta penanda waktu dalam format Unix. Bentuk git log yang rapi sebenarnya hanyalah tampilan yang diformat dari struktur mentah ini; cara Git menyimpan objek tree dan blob dibedah pada section Internals dan Performa .

Dua bangunan ini — repository yang menjadi wadahnya dan commit yang menjadi isinya — cukup untuk memahami seluruh peta Course. Chapter penutup section ini memetakan 20 section Course dari fondasi hingga proyek terapan, supaya kita selalu tahu posisi dan arah belajar. Lanjut ke Alur Belajar Git .