- Bab 8 dari 8
- 30 menit
- 4 soal kuis
Praktik Terbaik, Kesalahan Umum, dan Studi Kasus Tim
Di bab ini (9 bagian)
Tujuan bab ini
- Menulis pesan commit yang jelas dengan format Conventional Commits.
- Mengenali kesalahan umum pemula di GitHub, terutama push ditolak, secret ter-commit, dan conflict, beserta solusinya.
- Menerapkan GitHub Flow pada proyek tim tiga orang, dari membuat repo sampai rilis.
- Tahu ke mana belajar berikutnya setelah kelas ini.
Pesan commit yang baik
Pesan commit adalah dokumentasi paling murah dan paling awet. Enam bulan lagi, kamu (atau temanmu) akan membuka riwayat untuk mencari kapan sebuah bug muncul. Pesan seperti update, fix bug, atau asdasd sama sekali tidak membantu.
Banyak tim memakai format Conventional Commits:
Cakupan opsional. Tipe yang paling sering dipakai:
| Tipe | Kapan dipakai |
|---|---|
feat | Menambah fitur baru |
fix | Memperbaiki bug |
docs | Mengubah dokumentasi saja |
style | Format kode tanpa mengubah logika |
refactor | Menata ulang kode tanpa mengubah perilaku |
test | Menambah atau memperbaiki test |
chore | Pekerjaan rutin, misalnya update dependensi |
Contoh yang baik:
Pakai kalimat perintah yang pendek ("tambah", bukan "menambahkan" atau "ditambahkan"), satu commit untuk satu tujuan, dan simpan detail panjang di badan commit atau deskripsi PR. Bonusnya, pesan yang rapi bisa diolah alat otomatis menjadi changelog, dan judul PR dengan format yang sama membuat hasil squash and merge tetap enak dibaca.
Kesalahan umum pemula dan solusinya
Push ditolak
Kamu baru mau push, tapi Git menolak:
Artinya ada commit di GitHub yang belum kamu punya, biasanya push dari teman. Solusinya: git pull, bereskan conflict kalau ada, lalu git push lagi. Jangan langsung git push --force, karena itu menimpa commit temanmu di server.
Di Git 2.27 ke atas, kalau riwayat lokal dan remote sama-sama punya commit baru, git pull polos bisa berhenti dengan pesan fatal: Need to specify how to reconcile divergent branches. Pilih sekali saja caranya, misalnya merge:
(Pilihan rebase dibahas di kelas Git.)
Terlanjur commit secret
File .env berisi token ikut ter-push. Menghapus file di commit berikutnya tidak cukup, karena riwayat Git tetap menyimpannya dan siapa pun bisa membuka commit lama. Urutan penanganannya:
- Cabut (revoke) dan ganti kredensialnya di layanan asalnya. Ini langkah terpenting.
- Hentikan pelacakan file dan cegah terulang:
git rm --cached hanya mengeluarkan file dari repo, file di laptopmu tetap ada. Untuk benar-benar membersihkan riwayat dibutuhkan alat seperti git filter-repo, tapi kredensial lama tetap harus dianggap bocor. Secret scanning GitHub biasanya juga mengirim peringatan untuk kasus ini.
Conflict
Dua orang mengubah baris yang sama, lalu git pull berakhir dengan:
Buka file itu, cari penanda <<<<<<<, =======, dan >>>>>>>, sisakan versi final, hapus semua penanda, lalu git add dan git commit. Conflict bukan tanda kamu gagal; itu cara Git bertanya, "versi mana yang benar?". Untuk conflict di PR, GitHub juga menyediakan tombol Resolve conflicts di halaman PR bila conflict-nya sederhana.
Kesalahan lain yang sering muncul: push langsung ke main (aktifkan branch protection), commit raksasa berisi sepuluh perubahan (pecah jadi commit kecil), lupa pull sebelum mulai kerja, branch yang hidup berminggu-minggu, dan repo tanpa README.
Studi kasus: tim tiga orang
Ani, Budi, dan Citra membuat aplikasi web pendataan buku untuk tugas akhir dengan tenggat empat minggu. Ani pegang antarmuka, Budi basis data dan API, Citra test dan dokumentasi. Kesepakatan tim: main dilindungi, setiap perubahan lewat PR, minimal satu approval, dan squash and merge sebagai strategi baku.
Minggu 1: menyiapkan rumah. Ani membuat organization tim-buku, repo pendataan-buku dengan README, .gitignore Node, dan lisensi MIT. Budi dan Citra diundang ke team dengan peran Write. Di Settings › Branches, Ani membuat aturan untuk main: wajib PR, wajib satu approval, wajib status check CI lulus.
Minggu 2: memecah pekerjaan. Setiap tugas jadi issue berlabel dan ber-assignee, lalu dimasukkan ke papan Projects. Masing-masing bekerja di branch sendiri:
Minggu 3: PR dan review. Ani membuka PR berjudul feat(ui): tampilkan daftar buku dengan deskripsi Closes #4. Workflow CI menjalankan npm test. Citra mereview, meminta perubahan kecil, Ani push perbaikan ke branch yang sama, lalu Citra approve dan PR di-merge. Issue #4 tertutup otomatis dan kartunya pindah ke Done.
Minggu 4: rilis. Setelah fitur terakhir masuk, Citra melengkapi README, Budi membuat tag v1.0.0 dan Release dengan release notes otomatis, lalu situsnya diterbitkan lewat GitHub Pages. Dosen cukup menerima satu tautan.
Pola ini berlaku untuk tugas kelompok apa pun: branch kecil, PR, review, CI hijau, merge, rilis.
Ringkasan seluruh kelas
- Git adalah alat version control; GitHub adalah platform tempat repo disimpan dan dikolaborasikan.
- Amankan akun dengan 2FA, autentikasi dengan PAT atau SSH.
- Repo yang baik punya README,
.gitignore, dan LICENSE. - Siklus harian: pull, ubah, add, commit, push.
- Satu branch untuk satu tujuan, gabungkan lewat pull request yang direview.
- Issues, label, dan Projects menjaga pekerjaan tim tetap terlacak.
- Actions menjalankan test otomatis; Pages dan Releases menerbitkan hasilnya.
- Jangan pernah commit kredensial.
Sumber belajar
- docs.github.com: dokumentasi resmi semua fitur GitHub.
- GitHub Skills (skills.github.com): kursus interaktif yang dikerjakan langsung di repo, mulai dari sini.
- Pro Git (git-scm.com/book): buku gratis tentang Git.
- GitHub Education (education.github.com): Student Developer Pack untuk pelajar.
- Learn Git Branching (learngitbranching.js.org): latihan visual branch dan merge.
Kesalahan umum
- Pesan commit tanpa makna seperti
updateataufix. - Memakai
git push --forcekemainuntuk "mengatasi" push ditolak. - Hanya menghapus
.envtanpa mengganti token yang bocor. - Membiarkan penanda conflict
<<<<<<<ikut ter-commit.
Coba sendiri
Simulasikan push ditolak dan conflict di laptop, memakai repo bare sebagai pengganti GitHub:
Push terakhir ditolak dengan ! [rejected] main -> main (fetch first). Sekarang tarik dengan merge:
Buka README.md, sisakan baris x dan y, hapus penanda, lalu:
Kamu akan melihat empat commit, dengan commit penyelesaian conflict di paling atas.
Rangkuman
- Pakai Conventional Commits:
feat,fix,docs,refactor,test,chore, dengan kalimat perintah yang singkat. - Push ditolak berarti remote punya commit baru:
git pull, bereskan conflict, lalu push lagi, bukan--force. - Secret yang ter-push harus dicabut dan diganti;
.gitignoredangit rm --cachedmencegahnya terulang. - Conflict diselesaikan dengan memilih versi final, menghapus penanda, lalu add dan commit.
- GitHub Flow untuk tim: issue, branch, PR, review, CI, merge, tag, Release, Pages.
- Lanjutkan belajar lewat docs.github.com dan GitHub Skills.
Slide 38 sampai 44 dari deck GitHub. Penjelasan lengkapnya ada di mode Baca.

Selesaikan bab ini
- 1. Baca materi
- 2. Kuis (4 soal)
Cek pemahaman
1Kamu menjalankan git push dan mendapat output berikut. Langkah yang tepat berikutnya adalah
$ git push To https://github.com/tim/buku.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'https://github.com/tim/buku.git' hint: Updates were rejected because the remote contains work that you do not hint: have locally.2Pesan commit mana yang sesuai format Conventional Commits untuk perbaikan bug?
3Jika token API terlanjur ter-push ke GitHub, langkah terpenting adalah mencabut token itu dan membuat token baru.
4Setelah git pull, git status menampilkan bagian berikut. Apa arti keadaan ini?
$ git status On branch main You have unmerged paths. (fix conflicts and run "git commit") Unmerged paths: (use "git add <file>..." to mark resolution) both modified: README.md
