# Pull request di Git: apa itu dan cara membuat PR di GitHub

URL: https://skillaria.top/id/guides/git/pull-request-git-apa-itu-cara-membuat

Pull request (PR) adalah permintaan untuk menggabungkan branch Anda ke branch utama di GitHub: Anda menunjukkan perubahan, rekan tim mendiskusikan dan memeriksanya, lalu setelah disetujui branch digabungkan. Di GitLab, fitur yang sama disebut merge request (MR). PR adalah fitur platform, bukan perintah Git, dan tidak terkait dengan perintah git pull.

Pull request (PR) adalah usulan untuk menggabungkan perubahan dari satu branch ke branch lain, yang dibuat di platform seperti GitHub. Anda mengirim branch ke server, membuka PR, lalu tim melihat diff, memberi komentar pada baris kode, menjalankan pemeriksaan otomatis, dan baru kemudian menekan tombol merge. Di GitLab, mekanisme yang sama disebut merge request (MR). Jika ditanya singkat git pull request apa itu, jawabannya: titik kontrol antara "saya sudah menulis kode" dan "kode sudah masuk ke main".

## Git pull request apa itu dan dari mana namanya

Namanya terbentuk secara historis. Penulis perubahan meminta pemilik repositori untuk "menarik" (pull) branch miliknya, dari situlah istilah pull request berasal. GitLab memilih nama yang menggambarkan hasilnya, yaitu merge request, permintaan untuk menggabungkan. Bitbucket dan Azure DevOps memakai istilah pull request. Pada dasarnya semuanya sama: branch sumber, branch tujuan, deskripsi, diskusi, pemeriksaan, dan tombol merge.

Yang penting dipahami: pull request bukan bagian dari Git. Tidak ada objek "PR" di Git, dan Anda tidak bisa membuatnya lewat commit atau menemukannya di folder `.git`. PR adalah entitas platform: GitHub menyimpan deskripsi, komentar, dan status pemeriksaan di sisinya, sedangkan Git hanya mengurus branch dan commit yang termasuk dalam PR.

Dalam percakapan developer, singkatan PR hampir selalu berarti pull request: "kirim PR-nya", "PR untuk review", "sudah saya merge PR-nya". Untuk GitLab orang biasanya menyebut MR.

## Pull request dan git pull: apa bedanya

Kedua istilah ini sering tertukar karena mirip. Perintah `git pull` mengambil commit baru dari repositori remote dan langsung menggabungkannya ke branch Anda saat ini. Ini operasi lokal lewat terminal. Pull request adalah halaman web di GitHub, GitLab, atau Bitbucket yang berisi usulan untuk menggabungkan satu branch ke branch lain.

|  | git pull | Pull request |
| --- | --- | --- |

| Berada di mana | Perintah Git di terminal | Halaman di GitHub, GitLab, Bitbucket |

| Apa yang dilakukan | Mengambil perubahan dari server ke komputer Anda | Mengusulkan penggabungan branch Anda ke branch lain atau bersama |

| Siapa yang terlibat | Hanya Anda | Penulis, reviewer, CI |

| Perlu platform? | Tidak, cukup remote | Ya |

Tidak ada perintah "git pull request" di Git. Ada utilitas lama `git request-pull`, tetapi perintah itu hanya membuat teks email berisi ringkasan perubahan untuk dikirim, dan tidak berhubungan dengan PR di GitHub.

## Mengapa perlu pull request

Selama proyek hanya dikerjakan satu orang, Anda bisa commit langsung ke main. Begitu ada dua orang atau lebih, push langsung ke branch utama mulai menyebabkan build rusak dan pekerjaan hilang. Pull request menyelesaikan beberapa masalah sekaligus:

- **review kode** — orang kedua melihat perubahan sebelum masuk ke main dan menangkap kesalahan yang terlewat oleh penulis;
- **pemeriksaan otomatis** — GitHub Actions atau CI lain menjalankan test dan linter di setiap PR, dan status merah mencegah kode yang rusak digabung;
- **riwayat keputusan** — setahun kemudian, dari PR Anda bisa mengetahui bukan hanya apa yang diubah, tetapi juga mengapa, lengkap dengan diskusinya;
- **kontribusi ke proyek orang lain** — di open source Anda tidak punya hak tulis, dan PR dari fork adalah satu-satunya cara mengusulkan perbaikan;
- **perlindungan branch** — aturan proteksi branch di GitHub bisa melarang push langsung ke main dan mewajibkan PR yang sudah disetujui.

## Cara membuat pull request di GitHub dari branch

Ini adalah skenario utama untuk tim yang semua anggotanya punya hak tulis ke repositori. Pekerjaan dilakukan di branch fitur, dan main hanya berubah lewat PR.

### Langkah 1. Buat branch dari main yang terbaru

```
git switch main
git pull
git switch -c feature/login-form
```

Beri nama branch yang jelas: `feature/…`, `fix/…`, atau nomor tugas. Reviewer langsung tahu apa yang dibahas.

### Langkah 2. Buat commit

```
git add src/login.js
git commit -m "Tambah form login"
```

Satu PR untuk satu tugas. PR kecil dengan 100–300 baris bisa diperiksa dengan cepat dan teliti, sedangkan PR dengan 3000 baris sering disetujui tanpa benar-benar dibaca.

### Langkah 3. Kirim branch ke server (git push untuk pull request)

```
git push -u origin feature/login-form
```

Flag `-u` menghubungkan branch lokal dengan branch remote, sehingga selanjutnya cukup `git push`. Respons GitHub akan langsung menampilkan tautan untuk membuat PR:

```
remote: Create a pull request for 'feature/login-form' on GitHub by visiting:
remote:      https://github.com/team/app/pull/new/feature/login-form
```

### Langkah 4. Buka PR di antarmuka web

Buka tautan dari terminal, atau buka repositori di GitHub. Setelah push terbaru, akan muncul banner dengan tombol "Compare & pull request". Jalur lain adalah tab "Pull requests" lalu tombol "New pull request".

1. Periksa pasangan branch: base adalah tujuan penggabungan (biasanya `main`), compare adalah branch Anda.
2. Tulis judul: apa yang dikerjakan, bisa dalam bentuk perintah atau ringkasan singkat.
3. Di deskripsi, jelaskan alasannya, cara memeriksanya, dan apa yang belum dikerjakan. Jika repositori punya template PR, kolomnya akan terisi otomatis.
4. Di sisi kanan, tentukan reviewer (Reviewers), assignee, dan label jika tim memakainya.
5. Klik "Create pull request", atau pilih draft (dijelaskan di bawah).

### Membuat PR dari terminal: GitHub CLI

Jika tidak ingin berpindah ke browser, ada utilitas resmi `gh`. Ini bukan perintah Git, melainkan program terpisah dari GitHub, tetapi untuk PR sangat praktis:

```
gh pr create --base main --title "Tambah form login" --body "Closes #42"
gh pr list
gh pr checkout 57
gh pr merge 57 --squash
```

Untuk pertanyaan "perintah pull request git apa saja", jawaban jujurnya: Git mengurus branch, commit, dan push, sedangkan PR dibuat di platform, lewat browser, `gh`, atau API.

## Cara membuat pull request ke repositori orang lain lewat fork

Di proyek open source Anda tidak punya hak tulis. Karena itu, pertama-tama buat fork, yaitu salinan repositori di akun GitHub Anda. Kerjakan di fork tersebut, lalu usulkan perubahan ke repositori asli.

1. Di halaman proyek, klik "Fork". Repositori `github.com/you/project` akan muncul di akun Anda.
2. Clone fork Anda, lalu tambahkan repositori asli sebagai remote kedua, biasanya bernama `upstream`.
3. Buat branch, buat commit, dan kirim branch ke fork Anda.
4. Di GitHub, buka PR: base repository adalah proyek asli, head repository adalah fork dan branch Anda.

```
git clone git@github.com:you/project.git
cd project
git remote add upstream https://github.com/owner/project.git
git switch -c fix/typo-readme
git commit -am "Perbaiki salah ketik di README"
git push -u origin fix/typo-readme
```

Sebelum mulai, buka file `CONTRIBUTING.md`. Biasanya di sana dijelaskan aturan penulisan commit, test, dan apakah Anda perlu membuat issue lebih dulu. Jaga agar fork tetap mutakhir dengan `git fetch upstream` dan `git rebase upstream/main` di branch Anda, supaya PR tidak tertinggal dari repositori asli.

## Merge request di GitLab: apa itu dan cara membuatnya

Merge request di GitLab adalah padanan penuh dari pull request. Namanya dan detail antarmukanya berbeda, tetapi prosesnya sama: branch, push, permintaan penggabungan, review, lalu merge.

Anda bisa membuat MR dengan beberapa cara:

- lewat tautan yang dicetak GitLab di terminal setelah `git push` branch baru;
- di bagian Merge requests proyek dengan tombol "New merge request", dengan memilih branch sumber dan tujuan;
- langsung saat push, memakai push options GitLab, tanpa membuka browser.

```
git push -o merge_request.create -o merge_request.target=main origin feature/login-form
```

Istilah di GitLab sedikit berbeda: persetujuan disebut approve, penanggung jawab penggabungan disebut assignee, dan alih-alih GitHub Actions, GitLab memakai GitLab CI/CD dengan file `.gitlab-ci.yml`. Draf MR juga tersedia dan disebut Draft.

## Review pull request

Reviewer membuka tab "Files changed" dan melihat diff. Pada baris mana pun bisa ditulis komentar, atau diusulkan perubahan siap pakai (suggestion) yang bisa diterapkan penulis dengan satu klik. Komentar dikumpulkan dalam satu review dan dikirim sekaligus dengan salah satu keputusan:

- **Comment** — hanya catatan tanpa keputusan;
- **Approve** — perubahan disetujui;
- **Request changes** — perlu perbaikan, penggabungan belum diinginkan.

Review yang baik memeriksa logika, keterbacaan, test, dan kasus tepi, dan tidak memperdebatkan selera. Format kode sebaiknya diserahkan ke linter di CI. Penulis sebaiknya membalas setiap komentar: sudah diperbaiki, sudah didiskusikan, atau dibiarkan dengan penjelasan.

### Cara memeriksa PR orang lain secara lokal (git checkout pull request)

Kadang kode perlu dijalankan di komputer Anda. Jika branch ada di repositori yang sama, cukup `git fetch` dan `git switch`. Untuk PR dari fork, GitHub menyediakan referensi khusus `pull/<nomor>/head`:

```
git fetch origin pull/57/head:pr-57
git switch pr-57
```

Di GitLab, referensinya bernama `merge-requests/<nomor>/head`. Atau cukup `gh pr checkout 57` jika GitHub CLI terpasang.

## Cara memperbarui pull request setelah komentar review

PR terhubung ke branch, bukan ke commit tertentu. Cukup buat commit baru di branch yang sama lalu kirimkan, dan PR akan diperbarui otomatis. Tidak perlu membuat permintaan baru.

```
git commit -am "Perbaiki sesuai catatan review"
git push
```

### Git rebase pull request: ambil main yang terbaru

Selama PR menunggu review, main terus maju. Jika GitHub menulis bahwa branch sudah usang atau ada konflik, perbarui branch Anda. Opsi rebase menghasilkan riwayat yang lurus:

```
git fetch origin
git rebase origin/main
# selesaikan konflik, git add, git rebase --continue
git push --force-with-lease
```

Setelah rebase, hash commit berubah, sehingga push biasa akan ditolak dan Anda perlu push paksa. Gunakan `--force-with-lease`: perintah ini menolak menimpa branch jika ada commit orang lain yang masuk. Jika di branch itu ada lebih dari satu orang yang bekerja, lebih aman menggabungkan main dengan `git merge origin/main`, karena tidak menulis ulang riwayat.

## Cara menggabungkan pull request: merge, squash, dan rebase

Setelah review disetujui dan pemeriksaan hijau, PR siap digabungkan. GitHub menawarkan tiga cara, dan administrator repositori bisa membatasi pilihannya.

| Cara | Hasil di main | Cocok untuk |
| --- | --- | --- |

| Create a merge commit | Semua commit branch ditambah satu merge commit | Riwayat lengkap diperlukan dan terlihat commit mana yang datang bersama |

| Squash and merge | Satu commit berisi semua perubahan PR | Branch berisi banyak commit kecil seperti "fix typo", dan log main harus bersih |

| Rebase and merge | Commit branch satu per satu, tanpa merge commit | Commit rapi dan masing-masing bermakna |

Merge pull request lewat antarmuka pada dasarnya sama dengan `git merge`, hanya dijalankan di server. Setelah penggabungan, GitHub menawarkan penghapusan branch. Terima saja, karena branch itu sudah tidak diperlukan. Bersihkan juga di komputer Anda:

```
git switch main
git pull
git branch -d feature/login-form
```

PR juga bisa digabungkan secara manual dari terminal: gabungkan branch ke main secara lokal lalu push. GitHub akan mengenali bahwa commit branch sudah masuk ke base dan menandai PR sebagai merged. Namun cara ini melewatkan pemeriksaan dan aturan proteksi branch, sehingga di tim biasanya penggabungan dilakukan lewat tombol.

### Auto-merge dan merge queue

Jika pemeriksaan berjalan lama, Anda bisa mengaktifkan auto-merge: PR akan digabung sendiri setelah semua syarat terpenuhi. Di repositori besar dipakai merge queue, yaitu antrean yang menguji setiap PR di atas PR yang sudah ada di antrean, agar main tidak rusak karena perubahan yang saling bertabrakan.

## Draft pull request

Draft adalah PR yang belum siap di-review. PR seperti ini tidak bisa digabung, dan reviewer tidak menerima permintaan untuk memeriksanya. Draft berguna untuk menunjukkan arah lebih awal, menjalankan CI, atau meminta pendapat soal arsitektur. Di GitHub, pilih opsi draft pada menu tombol pembuatan PR, atau jalankan `gh pr create --draft`. Jika pekerjaan sudah selesai, klik "Ready for review". Di GitLab, draf ditandai dengan awalan `Draft:` pada judul MR.

## Menghubungkan pull request dengan issue

Jika di deskripsi PR Anda menulis kata kunci dan nomor tugas, GitHub akan menutup issue tersebut secara otomatis setelah PR digabung ke branch default:

```
Closes #42
Fixes #17
Resolves #8
```

Kata close, fix, dan resolve bekerja dalam beberapa bentuknya (closes, fixed, resolves). Hanya menyebut `#42` tanpa kata kunci akan membuat tautan, tetapi tidak menutup tugasnya. Di GitLab, `Closes #42` dan frasa serupa juga berfungsi.

## Apakah pull request atau merge request bisa dihapus

Pengguna biasa tidak bisa menghapus PR di GitHub. Yang bisa dilakukan hanya menutupnya lewat tombol "Close pull request". PR yang sudah ditutup tetap ada di riwayat dan bisa dibuka lagi. Hapus branch-nya secara terpisah. Penghapusan PR secara permanen hanya bisa dilakukan lewat dukungan GitHub, misalnya jika ada rahasia yang terlanjur masuk ke sana.

Di GitLab, MR bisa ditutup oleh penulis atau anggota dengan hak yang cukup, sedangkan penghapusan dilakukan oleh pemilik proyek atau administrator. Jika kata sandi atau token terlanjur masuk ke PR, menutup PR saja tidak cukup: cabut rahasia itu segera, karena commit-nya sudah pernah sampai ke server.

## Kesalahan umum dengan pull request

- **PR dari main.** Anda commit ke main lokal lalu membuka PR dari sana. PR berikutnya akan ikut membawa perubahan lama. Selalu kerjakan di branch terpisah.
- **Branch base yang salah.** PR dibuka ke `develop` padahal seharusnya `main`, atau sebaliknya. Base bisa diubah lewat tombol Edit di dekat judul PR.
- **File yang tidak perlu ikut dalam diff.** Hasil build, `node_modules`, `.env`. Tambahkan ke `.gitignore` dan keluarkan dari indeks dengan `git rm --cached`.
- **PR terlalu besar.** Pecah tugas menjadi beberapa PR yang berurutan.
- **Push biasa setelah rebase.** Muncul error `rejected (non-fast-forward)`. Gunakan `git push --force-with-lease`, bukan `--force`.
- **Konflik.** Jangan menyelesaikannya dengan asal-asalan di editor web. Tarik main ke lokal, selesaikan konfliknya, dan jalankan test.

## Pull request dalam git flow dan proses lain

Pull request bisa dipakai di proses kerja tim apa pun. Di GitHub Flow prosesnya sederhana: branch dari main, PR, review, merge, deploy. Di git flow, PR dibuka ke `develop` dari branch fitur, sedangkan branch rilis dan hotfix juga melewati PR ke `main`. Di trunk-based development, PR dibuat pendek dan hidup selama hitungan jam, bukan hari. Apa pun prosesnya, aturannya sama: perubahan ke branch bersama hanya masuk lewat pull request.

## Kesimpulan

Pull request adalah mekanisme platform, bukan perintah Git: branch yang dikirim ke server ditambah halaman untuk diskusi, review, dan pemeriksaan. Di GitLab disebut merge request, dan dalam percakapan orang menyebutnya PR atau MR. Buat PR dari branch terpisah, jaga agar tetap kecil, perbarui dengan push ke branch yang sama, dan pilih cara penggabungan yang sesuai dengan riwayat proyek. Branch fitur, fork, dan pull request dibahas secara praktis dalam kursus Git.

## FAQ

**Berapa banyak reviewer yang dibutuhkan untuk satu pull request?**

Biasanya cukup satu atau dua orang. Jumlah persetujuan minimum diatur di aturan proteksi branch, dan tanpa persetujuan itu tombol merge tidak akan aktif.

**Bisakah membuat pull request tanpa fork?**

Bisa, jika Anda punya hak tulis ke repositori: buat branch di repositori itu dan buka PR darinya. Fork hanya diperlukan jika Anda tidak punya hak tulis.

**Apa yang harus dilakukan jika PR lama tidak diperiksa?**

Ingatkan reviewer dengan sopan lewat komentar atau di chat tim. Di proyek open source, menunggu bisa memakan waktu berminggu-minggu. Pastikan juga PR Anda sesuai dengan CONTRIBUTING.md.

**Bisakah membuka pull request antara dua branch di fork sendiri?**

Bisa, di halaman perbandingan pilih fork Anda sebagai base sekaligus head. Cara ini praktis untuk mereview perubahan sendiri sebelum dikirim ke proyek asli.

**Mengapa PR menampilkan commit yang tidak saya buat?**

Kemungkinan besar branch dibuat dari main yang tidak mutakhir, atau base yang dipilih salah. Lakukan rebase ke main terbaru atau ubah base di pengaturan PR.


---
Source: Skillaria.Top (https://skillaria.top)
