Kenapa ini penting
Pernah punya file bernama tugas-final.docx, tugas-final-revisi.docx, tugas-final-revisi-BENERAN.docx? Itulah version control versi manual, dan hasilnya kacau. Version control adalah sistem yang mencatat setiap perubahan file dari waktu ke waktu, sehingga kamu bisa melihat siapa mengubah apa dan kapan, kembali ke versi sebelumnya kalau ada yang rusak, dan bekerja bersama orang lain tanpa saling menimpa. Git adalah version control paling populer di dunia dan standar industri web. Hampir semua lowongan developer mencantumkan Git. Analogi terbaiknya: Git adalah tombol "save game" untuk kode. Setiap commit adalah titik simpan yang bisa kamu kunjungi lagi kapan saja.
Konsep inti
Git vs GitHub
Git adalah program yang berjalan di komputermu dan menyimpan riwayat di folder tersembunyi .git. GitHub (juga GitLab, Bitbucket) adalah situs yang menyimpan salinan repository di internet dan menambahkan fitur kolaborasi. Git bisa dipakai tanpa GitHub; GitHub tidak berguna tanpa Git. Modul ini fokus ke Git lokal, GitHub dibahas di modul 7.
Memasang dan mengatur Git
- macOS: ketik
git --versiondi terminal. Kalau belum ada, macOS akan menawarkan memasang Command Line Tools. Alternatif: Homebrew (brew install git). - Windows: unduh Git for Windows dari git-scm.com. Paket ini sudah termasuk Git Bash.
- Linux: lewat package manager, misalnya
sudo apt install git.
Rilis terbaru di git-scm.com saat materi ini ditulis adalah Git 2.56.0. Versi bawaan sistem bisa sedikit lebih lama (contoh: macOS dengan Command Line Tools memberikan 2.54), dan itu tidak masalah untuk semua materi di sini.
Setelah terpasang, kenalkan dirimu ke Git (cukup sekali per komputer):
git config --global user.name "Budi Santoso"
git config --global user.email "budi@contoh.id"
git config --global init.defaultBranch main
Baris ketiga penting: dokumentasi resmi Git menyebut nama branch awal default saat ini masih master dan akan berubah menjadi main di Git 3.0. GitHub sudah memakai main, jadi lebih baik samakan sejak awal.
Tiga area Git
| Area | Isi | Analogi |
|---|---|---|
| Working directory | File yang sedang kamu edit | Meja kerja |
| Staging area (index) | Perubahan yang sudah dipilih untuk disimpan | Kotak paket yang siap dikirim |
Repository (.git) |
Riwayat commit yang tersimpan permanen | Arsip foto bertanggal |
Alurnya: edit file, lalu git add (masukkan ke kotak), lalu git commit (foto dan arsipkan). Dengan staging, kamu bisa memilih: dari lima file yang berubah, hanya dua yang di-commit sekarang.
Perintah inti
| Perintah | Fungsi |
|---|---|
git init |
Membuat repository baru di folder ini |
git status |
Melihat file mana yang berubah, baru, atau sudah di-stage |
git add <file> / git add . |
Memasukkan perubahan ke staging |
git commit -m "pesan" |
Menyimpan staging sebagai commit |
git log --oneline |
Melihat riwayat commit ringkas |
git diff |
Melihat perubahan yang belum di-stage |
git diff --staged |
Melihat perubahan yang sudah di-stage |
git restore <file> |
Membuang perubahan yang belum di-commit di file itu |
git restore --staged <file> |
Mengeluarkan file dari staging (perubahannya tetap ada) |
git revert <commit> |
Membuat commit baru yang membatalkan commit lama |
Kode singkat seperti 8cb6e4a di git log adalah potongan hash, sidik jari unik tiap commit.
.gitignore
File .gitignore berisi daftar file/folder yang tidak boleh dilacak Git:
node_modules/(bisa dibuat ulang dengannpm install, ukurannya besar).env(berisi password dan API key, jangan pernah di-commit).DS_Store(file sampah macOS),Thumbs.db(Windows)- folder hasil build seperti
dist/
Pesan commit yang baik
Pesan commit adalah catatan untuk dirimu di masa depan dan rekan tim. Aturan praktis:
- Satu commit untuk satu perubahan logis. Jangan menumpuk sepuluh hal dalam satu commit.
- Tulis dalam bentuk perintah singkat (sekitar 50 karakter): "Tambah form kontak", "Perbaiki link footer yang rusak".
- Jelaskan apa dan, kalau perlu, kenapa. Bukan "update", "fix", atau "asdf".
| Buruk | Baik |
|---|---|
update |
Tambah halaman about |
fix bug |
Perbaiki tombol menu yang tidak bisa diklik di HP |
wip lagi |
Pindahkan warna utama ke variabel CSS |
Restore vs revert
git restoredipakai untuk perubahan yang belum di-commit: "Batalkan editan saya di file ini." Hati-hati, perubahan yang dibuang tidak bisa diambil kembali.git revertdipakai untuk commit yang sudah ada: Git membuat commit baru yang isinya kebalikan dari commit lama. Riwayat tetap utuh dan jujur, jadi aman dipakai bahkan setelah kode dibagikan ke orang lain.
Contoh kode
Sesi lengkap berikut sudah dijalankan di repo uji. Hash commit di komputermu akan berbeda.
# 1. Buat repo baru
git init -b main portofolio
# → Initialized empty Git repository in .../portofolio/.git/
cd portofolio
# 2. Buat file pertama, cek status
echo '<h1>Halo</h1>' > index.html
git status --short
# → ?? index.html (?? = file baru yang belum dilacak)
# 3. Stage lalu commit
git add index.html
git commit -m "Tambah halaman awal"
# → [main (root-commit) 8cb6e4a] Tambah halaman awal
# → 1 file changed, 1 insertion(+)
# 4. Siapkan .gitignore
printf 'node_modules/\n.DS_Store\n.env\n' > .gitignore
mkdir node_modules && echo x > node_modules/a.js
echo SECRET=1 > .env
git status --short
# → ?? .gitignore (node_modules dan .env tidak muncul: sudah diabaikan)
git add .gitignore
git commit -m "Tambah .gitignore"
# 5. Ubah file, lihat perbedaannya
echo '<p>Saya belajar web</p>' >> index.html
git diff
# → @@ -1 +1,2 @@
# → <h1>Halo</h1>
# → +<p>Saya belajar web</p> (+ = baris yang ditambah)
# 6. Berubah pikiran: buang editan yang belum di-commit
git restore index.html
git status --short
# → (kosong, kembali bersih)
# 7. Commit yang ternyata salah, lalu dibatalkan dengan revert
echo '<p>Baris salah</p>' >> index.html
git commit -am "Tambah baris salah" # -a: stage otomatis file yang sudah dilacak
git revert --no-edit HEAD # HEAD = commit terakhir
# → [main 4504d1d] Revert "Tambah baris salah"
git log --oneline
# → 4504d1d Revert "Tambah baris salah"
# → 0fca9b5 Tambah baris salah
# → d7ef94c Tambah .gitignore
# → 8cb6e4a Tambah halaman awal
cat index.html
# → <h1>Halo</h1>
Kesalahan umum
- Menjalankan
git initdi folder home. Seluruh isi komputer ikut dilacak. Selalucdke folder proyek dulu. Kalau terlanjur, hapus folder.gityang salah tempat setelah memastikan lokasinya benar. - Meng-commit
.envatau password. Walaupun dihapus di commit berikutnya, isinya tetap ada di riwayat. Buat.gitignoresebelum commit pertama. Kalau terlanjur ter-push, ganti (rotate) password/API key tersebut. - Commit raksasa jarang-jarang. Sulit dicari dan sulit dibatalkan. Commit kecil dan sering, setiap satu langkah selesai.
- Mengira
git addsudah menyimpan.addhanya memasukkan ke staging. Belum ada titik simpan sampaigit commit. - Memakai
git restoreke file yang sebenarnya masih dibutuhkan. Perubahan yang belum di-commit akan hilang permanen. Cekgit diffdulu.
Latihan
- Mudah, Atur
user.name,user.email, daninit.defaultBranchdi komputermu, lalu cek dengangit config --global --list. - Sedang, Buat repo
latihan-gitberisiindex.htmldanstyle.css. Buat minimal tiga commit dengan pesan yang baik, lalu tampilkan riwayat dengangit log --oneline. - Menantang, Di repo yang sama, buat
.gitignoreyang mengabaikan.envdannode_modules/, buktikan dengangit status. Lalu buat commit yang "merusak" judul halaman dan batalkan dengangit revert.
Lihat solusi
- Solusi:
git config --global user.name "Nama Kamu"
git config --global user.email "email@kamu.id"
git config --global init.defaultBranch main
git config --global --list
# → user.name=Nama Kamu
# → user.email=email@kamu.id
# → init.defaultbranch=main
- Solusi:
mkdir latihan-git && cd latihan-git
git init
echo '<h1>Latihan Git</h1>' > index.html
git add index.html && git commit -m "Tambah halaman utama"
echo 'h1 { color: navy; }' > style.css
git add style.css && git commit -m "Tambah gaya judul"
echo '<link rel="stylesheet" href="style.css">' >> index.html
git commit -am "Hubungkan style.css ke halaman"
git log --oneline
# → 3 baris commit, terbaru di atas
- Solusi:
printf '.env\nnode_modules/\n' > .gitignore
echo 'API_KEY=rahasia' > .env
git status --short
# → ?? .gitignore (.env tidak muncul)
git add .gitignore && git commit -m "Abaikan .env dan node_modules"
echo '<h1>JUDUL RUSAK</h1>' > index.html
git commit -am "Ganti judul (salah)"
git revert --no-edit HEAD
cat index.html
# → isi index.html kembali seperti sebelum commit salah
Ringkasan
- Version control mencatat riwayat perubahan; Git adalah standar industri, GitHub adalah situs hosting-nya.
- Atur
user.name,user.email, daninit.defaultBranch mainsekali per komputer. - Alur dasar: edit,
git add,git commit; pantau dengangit status,git diff,git log. .gitignoremencegahnode_modules,.env, dan file sampah ikut tercatat.- Pesan commit singkat, spesifik, satu perubahan logis per commit.
git restoremembuang perubahan yang belum di-commit;git revertmembatalkan commit dengan commit baru.