Commit adalah snapshot isi proyekmu pada satu saat, lengkap dengan pesan. Tapi Git gak langsung memotret semua file: kamu pilih dulu file mana yang ikut, lewat staging area. Mirip foto bersama. Semua orang ada di ruangan, kamu suruh beberapa naik ke panggung (git add), lalu jepret (git commit). Yang gak naik panggung gak ikut di foto, dan fotonya diberi keterangan: pesan commit.
🧪 Tebakan cepat: di folder ada
index.htmldanstyle.css. Kamu cuma menjalankangit add index.html, lalu commit.style.cssikut tersimpan di commit itu? Tebak dulu, jawabannya ada di bagian "git add: pilih yang ikut".
Tiga tempat file kamu
Working directory --git add--> Staging area --git commit--> Repository
(folder kerjamu) (yang dipilih) (riwayat commit)
- Working directory: file-file di folder yang kamu edit.
- Staging area (disebut juga index): daftar perubahan yang akan masuk commit berikutnya. Dia area perantara antara working directory dan repository.
- Repository: riwayat commit yang tersimpan di
.git.
git add: pilih yang ikut
Repo baru saja di-init, isinya index.html dan style.css, dua-duanya untracked. Ada tiga cara memilih:
git add index.html # satu file
git add index.html style.css # beberapa file sekaligus
git add . # semua file baru atau berubah di folder ini
Pakai yang terakhir, lalu cek hasilnya:
$ git add .
$ git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: index.html
new file: style.css
git addgak menampilkan apa-apa kalau berhasil. Cek hasilnya dengangit status..artinya folder ini, jadigit add .memilih semua file di dalamnya yang baru atau berubah.- Kedua file pindah ke
Changes to be committed: sekarang ada di staging area.
Kalau tadi kamu cuma git add index.html, commit berikutnya cuma berisi index.html. style.css tetap ada di folder, gak ikut tersimpan, dan masih muncul sebagai untracked di git status. Itu jawaban tebakannya.
git commit: simpan snapshot
$ git commit -m "commit pertama"
[main (root-commit) 4c908fe] commit pertama
2 files changed, 2 insertions(+)
create mode 100644 index.html
create mode 100644 style.css
$ git status
On branch main
nothing to commit, working tree clean
-mdiikuti pesan commit dalam tanda kutip. Tanda kutipnya wajib kalau pesannya lebih dari satu kata.mainadalah branch-nya,root-commitartinya ini commit pertama di repo, dan4c908feadalah 7 karakter awal hash, nama unik commit ini. Hash punyamu akan beda, karena dihitung juga dari nama dan waktumu.2 files changed, 2 insertions(+): 2 file, total 2 baris baru.create mode 100644artinya file itu baru masuk repo.- Setelah commit, staging area kosong lagi, dan
working tree clean: semua file sama dengan commit terakhir.
Tanpa -m, git commit membuka text editor (biasanya Vim atau nano) untuk menulis pesannya. Di Vim, tekan i untuk mengetik, lalu Esc dan :wq untuk menyimpan dan keluar. Terminal latihan meniru editor itu: tanpa -m, isi editornya tampil, lalu baris berikutnya yang kamu ketik jadi pesannya. Ketik :q! untuk keluar tanpa pesan, dan Git membatalkan commit-nya: Aborting commit due to empty commit message.
Pesan commit yang baik
Pesan commit dibaca orang, termasuk kamu sendiri, berbulan-bulan kemudian. Tulis singkat, dan sebut apa yang berubah:
| Kurang jelas | Lebih baik |
|---|---|
update |
tambah form kontak di halaman utama |
fix |
perbaiki tombol login yang gak bisa diklik di HP |
asdf |
ganti warna judul jadi biru |
Banyak tim memakai bentuk perintah ("tambah", "perbaiki", "ganti"), seperti melengkapi kalimat "commit ini akan ...".
⚠️ Jebakan yang sering ketemu
- Commit sebelum
git add. Staging area masih kosong, jadi gak ada yang di-commit. Git menjawabnothing added to commit but untracked files present(untuk file baru) atauno changes added to commit(untuk file yang diubah). Add dulu, baru commit. - Lupa tanda kutip. Di
git commit -m commit pertama, cumacommityang dibaca sebagai pesan. Git asli menolak, karenapertamadikira nama file:error: pathspec 'pertama' did not match any file(s) known to git. Terminal latihan menjawab sama, dan gak ada commit yang dibuat. Tulisgit commit -m "commit pertama". - Mengedit lagi setelah
git add. Staging area menyimpan isi file saat kamu add. Editan sesudahnya gak ikut, dangit statusmenampilkan file itu dua kali: diChanges to be committeddan diChanges not staged for commit. Jalankangit addlagi sebelum commit. - Dua commit padahal diminta satu. Latihan ini meminta tepat 1 commit di
mainyang berisi kedua file. Jalankangit add .dulu, baru commit satu kali.
TL;DR: File berjalan dari working directory ke staging area (git add) lalu ke repository (git commit). Staging area, disebut juga index, adalah area perantara: cuma isinya yang ikut commit. git add . memilih semua file baru atau berubah. git commit -m "pesan" menyimpan snapshot dengan pesan dalam tanda kutip; tanpa -m, Git membuka text editor. Commit tanpa git add gak menyimpan apa-apa. Tulis pesan yang menyebut apa yang berubah, dan cek dengan git status sampai working tree clean.