Di GitHub, perubahan masuk ke repo orang lain lewat Pull Request (PR): kamu mengusulkan perubahan dari sebuah branch, orang lain membacanya (review), lalu pemilik repo menggabungkannya (merge). Mirip mengusulkan perbaikan resep di buku resep keluarga milik Nenek. Kamu gak boleh menulis langsung di bukunya. Jadi kamu fotokopi dulu bukunya, tulis perbaikan di fotokopianmu, lalu bawa ke Nenek: "resep ini mau aku ubah begini." Nenek membaca, mungkin minta diubah sedikit, lalu menyalinnya ke buku asli.
🧪 Tebakan cepat: kamu sudah membuka PR, lalu reviewer minta satu perbaikan. Apa yang kamu lakukan: tutup PR-nya lalu bikin PR baru, atau cukup push commit baru ke branch yang sama? Tebak dulu, jawabannya ada di bagian "Review, lalu merge".
Tiga tempat repo: asli, fork, dan clone
Ambil contoh repo belajarweb/kamus, kamus istilah web milik akun belajarweb. Kamu menemukan typo di dalamnya: tertulis Comit, harusnya Commit. Kamu gak punya akses tulis ke repo itu, jadi perubahanmu lewat tiga tempat:
| Tempat | Alamat | Isinya |
|---|---|---|
| Repo asli (upstream) | github.com/belajarweb/kamus |
Milik orang lain. Tujuan akhir perubahanmu. |
| Fork | github.com/kamu/kamus |
Salinan repo asli di akun GitHub-mu, dibuat dengan tombol Fork. Kamu bebas push ke sini. |
| Clone | folder kamus di laptopmu |
Salinan fork-mu di komputermu, dibuat dengan git clone. Di sini kamu mengedit dan commit. |
Jadi bedanya: fork itu salinan di GitHub, clone itu salinan di komputermu. Untuk berkontribusi ke project open source, langkah pertamanya fork, baru clone fork-mu.
Dari fork sampai Pull Request
Klik tombol Fork di halaman github.com/belajarweb/kamus. Setelah fork kamu/kamus jadi, lanjut di terminal:
$ git clone https://github.com/kamu/kamus.git
Cloning into 'kamus'...
$ cd kamus
$ git switch -c perbaiki-typo
Switched to a new branch 'perbaiki-typo'
$ git add kamus.md # setelah Comit diganti Commit di editor
$ git commit -m "docs: perbaiki typo Comit di kamus"
[perbaiki-typo 3f2a91c] docs: perbaiki typo Comit di kamus
1 file changed, 1 insertion(+), 1 deletion(-)
$ git push -u origin perbaiki-typo
remote: Create a pull request for 'perbaiki-typo' on GitHub by visiting:
remote: https://github.com/kamu/kamus/pull/new/perbaiki-typo
To https://github.com/kamu/kamus.git
* [new branch] perbaiki-typo -> perbaiki-typo
git clonemenyalin fork-mu ke laptop. Di clone ini,originmenunjuk ke fork-mu, bukan ke repo asli.git switch -c perbaiki-typo(sama dengangit checkout -b perbaiki-typo) membuat branch baru dan pindah ke sana. Satu perubahan, satu branch.git adddangit commitseperti biasa. Hash commit-mu akan beda dari contoh ini.git push -u origin perbaiki-typomengirim branch itu ke fork-mu di GitHub.-umengingat pasangannya, jadi push berikutnya cukupgit push.- GitHub langsung memberi link untuk membuka PR.
Buka link itu (atau tombol Compare & pull request), lalu pilih arahnya: base belajarweb/kamus branch main, compare kamu/kamus branch perbaiki-typo. Isi judul dan penjelasan, lalu Create pull request. Sekarang ada PR #12 dengan tulisan: kamu wants to merge 1 commit into belajarweb:main from kamu:perbaiki-typo.
Pull Request adalah fitur GitHub untuk mengajukan penggabungan kode dari satu branch ke branch utama, supaya di-review dulu sebelum di-merge.
Review, lalu merge
Pemilik repo, misalnya rina, membaca perubahanmu di tab Files changed. Dia punya tiga pilihan:
- Comment: cuma berkomentar.
- Approve: setuju, perubahannya boleh di-merge.
- Request changes: minta perbaikan dulu.
Misalnya Rina minta: "Tambahkan contoh perintahnya juga, ya." Kamu gak perlu bikin PR baru. Edit di laptop, commit, lalu push ke branch yang sama:
$ git add kamus.md
$ git commit -m "docs: tambah contoh git commit"
[perbaiki-typo 8d4e7b2] docs: tambah contoh git commit
1 file changed, 1 insertion(+)
$ git push
To https://github.com/kamu/kamus.git
3f2a91c..8d4e7b2 perbaiki-typo -> perbaiki-typo
PR #12 ikut ter-update dan sekarang berisi 2 commit, karena PR menunjuk ke branch, bukan ke commit tertentu. Itu jawaban tebakannya. Setelah Rina klik Approve, dia klik Merge pull request. Di main repo asli muncul merge commit Merge pull request #12 from kamu/perbaiki-typo, dan PR-nya berstatus Merged.
💡 Kalau kamu anggota tim
- Punya akses tulis? Gak perlu fork. Clone repo tim langsung, bikin branch, push ke repo tim, lalu buka PR dari branch itu ke
main. - Branch protection. Pemilik repo bisa mengunci
main: gak boleh push langsung, PR wajib punya minimal 1 approve, dan pengecekan otomatis (GitHub Actions) harus lulus. Kalau belum ada approve, tombol merge tertahan dengan pesanMerging is blocked. - Issues dipakai untuk mencatat bug atau ide sebelum ada kodenya. Tulis langkah untuk memunculkan bug-nya, dan PR yang memperbaikinya bisa menyebut nomornya, misalnya
Fixes #7, supaya issue itu tertutup otomatis saat PR di-merge.
⚠️ Jebakan yang sering ketemu
- Commit langsung di
mainfork-mu. Semua perubahan jadi tercampur di satu PR. Bikin branch baru untuk tiap perubahan. - Bikin PR baru untuk tiap revisi. Cukup push ke branch yang sama, PR-nya ter-update sendiri dan riwayat diskusinya tetap di satu tempat.
- Fork-nya ketinggalan. Repo asli terus bertambah commit, fork-mu gak. Pakai tombol Sync fork di GitHub, atau
git remote add upstream https://github.com/belajarweb/kamus.gitlalugit pull upstream main. - PR raksasa. 50 file sekaligus susah di-review. PR kecil dengan judul jelas dan penjelasan "apa dan kenapa" lebih cepat di-approve.
TL;DR: Untuk repo orang lain: Fork (salinan di GitHub-mu), git clone fork-nya (salinan di komputermu), git switch -c branch baru, commit, git push -u origin <branch>, lalu buka Pull Request ke main repo asli. Reviewer bisa Comment, Approve, atau Request changes. Revisi cukup di-push ke branch yang sama, PR-nya ikut ter-update. Setelah di-approve, PR di-merge dan muncul Merge pull request #12 from .... Anggota tim dengan akses tulis gak perlu fork.