Kuasai alur Pull Request di GitHub: buat PR dari UI maupun gh pr create, tulis deskripsi informatif dengan screenshot, beri code review inline comments, request changes, dan pilih strategi merge terbaik untuk menjaga history tetap rapi.

Di episode 10 kita membahas pola workflow kolaborasi: Centralized Workflow, Feature Branch Workflow, Gitflow, hingga Trunk-Based Development. Jika kalian perhatikan, hampir semua pola modern bermuara pada satu pintu gerbang yang sama sebelum kode menyentuh main — yaitu Pull Request (PR). PR bukan sekadar tombol "gabungkan kode", melainkan ruang diskusi, pemeriksaan kualitas, dan dokumentasi keputusan yang tersimpan permanen di repository.
Mengapa ini penting di dunia nyata? Banyak tim menetapkan aturan "tidak ada kode yang masuk ke main tanpa PR yang disetujui". Di perusahaan besar, PR menjadi tempat code review — menemukan bug sebelum produksi, bukan sesudahnya. PR yang ditulis baik juga menjadi jembatan komunikasi: apa yang diubah, mengapa diubah, dan bagaimana mengujinya. Episode ini membahas cara membuat PR, menulis deskripsi yang informatif, melakukan code review, dan memilih strategi merge yang tepat.
Pull Request adalah permintaan untuk menggabungkan sebuah branch (sumber) ke branch lain (tujuan). Ia mengemas semua yang dibutuhkan reviewer dalam satu tempat:
PR menambahkan lapisan yang tidak dimiliki git merge biasa: keputusan manusia dan mesin sebelum kode digabungkan. Git menyediakan mekanisme menggabungkan; GitHub menyediakan mekanisme persetujuan.
Cara paling umum adalah lewat UI. Alurnya dimulai dari push branch ke remote:
git switch -c feat/login
git add .
git commit -m "feat: tambah halaman login"
git push -u origin feat/loginSetelah push, GitHub menampilkan banner "Compare & pull request" di halaman repository. Klik tombol itu, lalu perhatikan tiga hal:
main).feat/login).Setelah yakin, klik Create pull request. PR kini punya nomor unik (misal #42) dan bisa dibagikan ke tim.
Tip
Periksa kembali base branch sebelum membuat PR. Error klasik adalah PR yang ditujukan ke branch yang salah, misalnya staging yang inginnya main — akibatnya kode mendarat di tempat yang tidak semestinya.
Praktisi CLI bisa melakukan semuanya tanpa membuka browser. Pastikan sudah login dengan gh auth login (dibahas di episode 0), lalu gunakan gh pr create:
gh pr create \
--base main \
--head feat/login \
--title "feat: tambah halaman login" \
--body "Menambahkan autentikasi pengguna dengan token JWT."Beberapa perintah gh pr yang wajib kalian hafal:
gh pr create --fill — mengisi title dan body otomatis dari commit.gh pr view — melihat detail PR.gh pr checkout — pindah ke branch PR untuk mengetes langsung.gh pr merge — merge PR ketika sudah disetujui.gh pr list --state open
gh pr view --web
gh pr merge 42 --squashDeskripsi yang baik menjawab pertanyaan reviewer sebelum mereka bertanya. Template yang lazim di tim profesional:
## Apa yang berubah?
Menambahkan autentikasi login dengan JWT di sisi API.
## Mengapa?
Menutup celah autentikasi yang sebelumnya tidak ada.
## Screenshot

## Cara menguji
1. Jalankan `bun run dev`
2. Login dengan akun dummy yang sudah dibuatScreenshot dan video mempercepat review secara drastis. Di browser, kalian bisa langsung menempel gambar dari clipboard ke textarea deskripsi — GitHub mengunggahnya otomatis. Untuk perubahan visual, rekam GIF atau video singkat yang menunjukkan alur sebelum dan sesudah.
Saat PR dibuat, reviewer menilai kode di tab Files changed. GitHub menyediakan tiga bentuk umpan balik:
Komentar inline adalah alat utama code review: kalian bisa menyorot baris tertentu, menulis pertanyaan atau saran, lalu memakai tombol Start a review supaya komentar terkirim sekaligus. Dari terminal, gunakan gh pr review:
gh pr review 42 --approve
gh pr review 42 --request-changes --body "Tolong tangani kasus token yang sudah kedaluwarsa."
gh pr review 42 --comment --body "Terima kasih, saya tambahkan test besok."Tip
Code review yang baik menjelaskan kenapa, bukan hanya apa. Daripada menulis "ganti ini", tulis "sebaiknya pakai flag atomic karena dua baris ini harus ter-commit bersama". Fokus pada behavior dan keamanan, bukan selera pribadi.
Setelah reviewer Request changes, penulis memperbaiki kode, push commit baru ke branch yang sama, dan PR otomatis ter-update. Proses berulang sampai disetujui.
Saat PR disetujui, tiba waktunya memilih cara menggabungkan. GitHub menawarkan tiga strategi:
| Strategi | Cara Kerja | Efek pada History | Kapan Dipakai |
|---|---|---|---|
| Create a Merge Commit | Semua commit branch digabung plus satu merge commit | History lengkap dengan percabangan | Perlu jejak kontribusi per-commit |
| Squash and Merge | Semua commit digabung menjadi satu | Satu commit bersih per fitur | Paling direkomendasikan |
| Rebase and Merge | Commit diterapkan satu per satu secara linear | History linear tanpa merge commit | Ingin linear namun per-commit dipertahankan |
Squash and Merge adalah rekomendasi default untuk kebanyakan tim. Alasannya: history menjadi rapi — satu fitur satu commit, mudah dibaca, mudah di-bisect (episode 17), dan mudah di-revert satu fitur sekaligus (episode 14). Commit kecil seperti "wip", "fix typo", dan "update" selama pengembangan tidak perlu terlihat di main.
git log --oneline --graph --all -8
git log --oneline --first-parentBaris pertama menunjukkan grafis history setelah merge; baris kedua menampilkan hanya commit utama — dengan squash, hasilnya deretan commit fitur yang linear dan mudah diikuti.
Episode ini membawa kalian dari sekadar push kode menjadi kolaborator profesional: konsep Pull Request sebagai gerbang kualitas, pembuatan PR dari GitHub UI dan gh pr create, deskripsi PR yang informatif dengan screenshot, proses code review dengan inline comments dan request changes, serta tiga strategi merge beserta rekomendasi Squash and Merge.
Poin yang harus kalian bawa:
PR yang baik membuka pertanyaan besar berikutnya: apa yang harus dikerjakan? Di episode 12 kita membahas GitHub Issues, Labels & Milestones — cara mencatat bug report, feature request, dan task, lalu menghubungkannya ke commit dan PR sehingga issue tertutup otomatis. Sampai jumpa di episode 12!