Ilustrasi pipeline tiga kotak panah, simbol alur git add dan commit

Git sudah terpasang, identitas sudah dikonfigurasi. Sekarang jantungnya Git: init, add, commit. Tiga perintah ini adalah 80 persen kerjaan Git sehari-hari. Kuasai tiga ini dengan benar, sisanya cuma variasi.

Di artikel sebelumnya kita install dan konfigurasi. Di artikel #30 kita sudah kenal konsep tiga ruang: working directory, staging area, dan repository. Hari ini teori itu jadi praktik: kamu akan bikin repo pertamamu dan membuat commit pertama dengan tanganmu sendiri.

Siapkan satu folder latihan (misalnya folder berisi file to-do list dari seri JavaScript kemarin, atau folder kosong berisi satu file teks). Kita mulai.

git init: Menyalakan Mesin Waktu di Satu Folder

Git tidak bekerja "global" untuk seluruh komputermu. Ia bekerja per folder proyek. Perintah git init artinya: "Git, mulai catat riwayat untuk folder ini".

mkdir proyek-pertama
cd proyek-pertama
git init

Yang terjadi di balik layar: Git membuat folder tersembunyi bernama .git di dalam folder-mu. Di sanalah semua riwayat, konfigurasi, dan "foto-foto" disimpan. Folder kerjamu sendiri tidak berubah sama sekali, file-filemu tetap seperti semula.

Dua aturan penting. Pertama: git init cuma dijalankan satu kali per proyek, di awal. Menjalankannya dua kali tidak merusak apa-apa, tapi tidak ada gunanya. Kedua: jangan pernah mengutak-atik isi folder .git secara manual. Itu dapur internal Git, biarkan ia yang mengurus.

Analoginya: git init seperti memasang kamera CCTV di satu ruangan. Sekali dipasang, ia siap merekam. Tapi ingat, kamera yang terpasang belum merekam apa-apa sampai kamu menekan tombol rekam (itulah add dan commit).

git status: Tanya Dulu Sebelum Bertindak

Sebelum melakukan apa-apa, biasakan bertanya ke Git: "kondisiku sekarang bagaimana?" Caranya:

git status

Di repo yang baru di-init dan berisi satu file catatan.txt, outputnya kurang lebih:

Untracked files:
  catatan.txt

"Untracked" artinya: Git melihat file ini ada, tapi belum mencatatnya sama sekali. Ia seperti tamu yang berdiri di depan CCTV tapi belum difoto. Jadikan kebiasaan: jalankan git status sebelum dan sesudah setiap perintah Git. Ini kompasmu. Kebanyakan kebingungan pemula ("kok fileku tidak ke-commit?") langsung terjawab begitu melihat status.

Berhenti dan tebak dulu! Kamu baru saja mengedit catatan.txt yang sudah pernah di-commit sebelumnya. Apa kata git status tentang file itu?

Jawaban: "modified" (atau "Changes not staged for commit"). Bukan "untracked", karena file ini sudah dikenal Git dari commit sebelumnya. Git membedakan tiga kondisi: untracked (belum pernah dicatat), modified (pernah dicatat, sekarang berubah), dan staged (perubahan sudah masuk ruang tunggu). Tiga kata ini adalah seluruh kosakata status Git.

git add: Memilih yang Masuk Ruang Tunggu

Ingat tiga ruang dari artikel #30? git add adalah perintah yang memindahkan perubahan dari working directory ke staging area (ruang tunggu).

git add catatan.txt   # tandai satu file spesifik
git add .             # tandai SEMUA perubahan di folder ini

Kenapa tidak langsung difoto saja, pakai acara ruang tunggu segala? Karena kamu butuh kontrol. Bayangkan kamu mengerjakan dua hal: memperbaiki bug di app.js dan iseng mengubah warna tombol di style.css. Kamu mau menyimpannya sebagai dua commit terpisah yang rapi ("perbaiki bug login" dan "ubah warna tombol"), bukan satu commit campur aduk. Caranya: git add app.js, commit, lalu git add style.css, commit.

Untuk latihan sehari-hari, git add . (tandai semua) sudah cukup. Tapi pahami bahwa git add per file itu ada untuk saat kamu butuh ketelitian. Cek lagi dengan git status: file yang sudah di-add akan muncul di bagian "Changes to be committed".

git commit: Memotret dan Menyimpan Selamanya

Setelah yang mau difoto sudah di ruang tunggu, saatnya memotret:

git commit -m "Tambah file catatan pertama"

-m artinya "message", pesan yang menjelaskan apa dan kenapa perubahan ini dibuat. Pesan ini menempel permanen di riwayat dan akan dibaca oleh dirimu di masa depan (dan oleh rekan timmu). Tulis yang jelas.

Contoh pesan yang baik vs buruk:

  • Buruk: "update", "fix", "asdasd". Tidak memberi informasi apa-apa.
  • Baik: "Tambah validasi form login", "Perbaiki bug tombol hapus yang tidak berfungsi". Jelas apa yang berubah.

Aturan praktisnya: tulis pesan commit seolah menjawab pertanyaan "kalau commit ini di-undo, apa yang hilang?" Kalau jawabannya jelas dari pesanmu, pesanmu sudah bagus. Dan satu commit = satu perubahan logis. Jangan campur "perbaiki bug" + "tambah fitur" + "rapikan kode" dalam satu commit.

Berhenti dan tebak dulu! Urutan perintah ini dijalankan di repo baru berisi a.txt. Berapa commit yang tercatat di riwayat?

git add a.txt
git commit -m "Commit pertama"
git add a.txt
git commit -m "Commit kedua"
Jawaban: 2 commit. Tapi perhatikan: commit kedua tidak menyimpan apa-apa yang baru karena a.txt tidak diubah di antara dua commit. Git akan membuat commit kosong (atau menolak, tergantung versi). Pelajarannya: commit itu memotret perubahan, bukan file. Tanpa perubahan, tidak ada yang perlu difoto. Selalu ubah sesuatu dulu, baru add dan commit.

Membaca buku harian dengan git log. Setelah beberapa commit, intip riwayatnya:

git log --oneline

Outputnya ringkas, satu baris per commit: kode unik singkat (hash) + pesan. Contoh:

a1b2c3d Tambah validasi form login
e4f5g6h Tambah file catatan pertama

Dibaca dari bawah ke atas: yang paling bawah adalah commit tertua, yang paling atas adalah yang terbaru. Setiap baris adalah satu "foto" yang bisa kamu kunjungi kembali kapan pun. Inilah mesin waktu yang dijanjikan artikel #30, dan kamu baru saja membangunnya sendiri.

Kalau riwayatmu sudah panjang dan git log biasa terasa penuh sesak, --oneline adalah teman terbaikmu. Ada juga git log --oneline --graph yang menggambar garis percabangan, berguna nanti saat kita belajar branch di #34.

Dua Persepsi yang Sering Salah

Pertama: "commit = menyimpan file (seperti Ctrl+S)." Bukan. Menyimpan file (Ctrl+S) itu urusan text editor, terjadi di working directory. Commit itu mencatat snapshot perubahan ke riwayat Git. Kamu bisa menyimpan file 100 kali tanpa commit sekalipun, dan Git tidak mencatat apa-apa. Sebaliknya, tanpa menyimpan file dulu, tidak ada perubahan untuk di-commit. Dua hal berbeda, jangan tertukar.

Kedua: "git add . itu berbahaya, harus selalu add per file." Untuk proyek latihan pribadi, git add . itu baik-baik saja dan memang cara tercepat. Add per file baru penting saat kamu mengerjakan banyak hal sekaligus dan mau commit yang rapi terpisah. Jangan sampai perfeksionisme soal add menghambatmu commit rutin. Commit kecil yang sering jauh lebih baik daripada commit besar yang jarang.

Kuis cepat: Urutan yang benar untuk menyimpan perubahan ke riwayat Git adalah...

Latihan: Ubah, Jangan Cuma Dibaca

  1. Bikin repo latihanmu. Buat folder latihan-git, isi dengan 2 file teks bebas, lalu git init, git add ., git commit -m "Commit pertamaku". Verifikasi dengan git log --oneline dan git status (status harus bersih).
  2. Ubah dan commit lagi dua kali. Edit satu file, commit dengan pesan yang jelas. Lalu edit file yang lain, commit lagi. Lihat git log --oneline: sekarang ada 3 baris riwayat. Rasakan ritmenya: ubah, add, commit, ulangi.
  3. Latih commit terpisah. Ubah kedua file sekaligus, tapi commit secara terpisah: git add file pertama saja, commit; lalu git add file kedua, commit. Cek git status di antara dua commit untuk melihat perbedaannya. Ini melatih kontrol staging area.

Habis Ini ke Mana?

Repo lokalmu sudah punya riwayat yang rapi. Tapi ia masih tinggal di laptopmu sendirian. Kalau laptop hilang, riwayat ikut hilang. Kalau mau pamer ke teman, tidak ada caranya.

Artikel berikutnya, Cara Push Repo Pertamamu ke GitHub, menutup lingkaran: bikin akun dan repo di GitHub, menghubungkan repo lokal ke sana, dan mengunggah semua commit-mu dengan git push. Dari sanalah kodemu resmi "go public".