# Pull Request: Bagaimana Merge berlaku di Github

# Pengenalan

`Merge` adalah sebuah tindakan dimana `git` akan menggabungkan `commit` yang telah dibuat menjadi satu `commit` yang baharu pada hujung (tip) sesebuah *git history*.

![Git Merge | Atlassian Git Tutorial](https://wac-cdn.atlassian.com/dam/jcr:c6db91c1-1343-4d45-8c93-bdba910b9506/02%20Branch-1%20kopiera.png?cdnVersion=1031 align="left")

Jika di lokal, kita boleh melakukan `git merge` untuk mencantumkankan `commit` daripada `feature_branch` kepada `main_branch`. Namun, ia sedikit berbeza apabila kita ingin melakukannya pada penyedia *cloud hosting* seperti **Github**.

Terdapat dua keadaan yang membezakan cara untuk `merge commit` di Github.

1. Keadaan *Branch* tidak dilindungi
    
2. Keadaan *Branch* dilindungi
    

## *Branch* tidak dilindungi

Sebuah *branch* yang tidak dilinduingi bermaksud *branch* tersebut tidak termaktub kepada peraturan-peraturan tertentu yang boleh di buat pada Github. Misalnya *branch* ini membenarkkan sesiapa sahaja untuk di- `merge` kepada dan juga daripada mana-mana *feature branch* yang ada.

Untuk *branch* jenis ini, kita boleh sahaja membuat *commit* dan *merging* seperti biasa di lokal kemudian *push* ke Github.

```bash
# pastikan berada di main branch 
$ git checkout main
# commit sesuatu perubahan 
$ git checkout -b feature_1 
$ git add . 
$ git commit -m "commit pertama"

# push branch ke remote
$ git push --set-upstream feature_1 origin 

# proses merge
$ git checkout main
$ git merge feature_1 

# push ke remote github
$ git push
```

Selepas menjalankan *command* diatas, kita akan mendapati `main` *branch* pada *remote* telah dikemaskini daripada `feature_1` *branch.* Proses `merging` telah berjaya tanpa melibatkan penggunaan UI di Github (iaitu Pull Request atau PR)

## *Branch* dilindungi

Sebaliknya, jika *branch* tersebut dilindungi; yakni terdapat peraturan yang telah ditetapkan supaya pengaturcara tidak boleh sewenang-wenangnya `merge` dan `push` daripada *branch lain* seperti yang berlaku keadaan *branch* tidak dilindungi. Disebabkan ia dilindungi, maka cara yang ditunjukkan pada keadaan pertama tidak dapat dilakukukan.

Ini keraana atas sebab peraturan yang telah ditetapkan, Github akan **menghalang** daripada pengguna untuk `push` *commit* tersebut melaikan ia melepasi pertaturan yang telah ditetapkan.

Kebiasaannya *branch* dilindungi akan mempunyai lapisan dibawah

1. Code review — kod akan disemak oleh ahli projek dan menunggu untuk *approval*
    
2. *Code testing —* Kod akan melalui *testing* (unit test, etc) yang telah ditetapkan dalam Git Actions.
    

Maka, apakah langkah untuk melakukan `merge` kepada `main` *branch* supaya anda boleh mengemaskini/menambah kod baru kepada projek anda untuk keadaan ini?

Kita perlu melakukan apa yang dinamakan sebagai **Pull Request.**

### Pull Request

Proses Pull Request (PR) adalah seperti berikut:

1. Buat *commit seperti biasa*
    

```bash
# Cipta branch baharu
$ git checkout -b my_branch 
$ git push --set-upstream my_branch origin 
$ git add . 
$ git commit -m "menambah sesuatu"
```

1. Github akan mengeluarkan notifikasi mengenai *commit* yang telah berlaku dengan butang *pull request*. Tekan butang *pull request* tersebut.
    
    (Jika tidak ada notifikasi tekan *pull request* pada projek repo anda di Github dan tekan *Create new pull request.*)
    
2. Setelah menekan *Pull request,* Github akan memaparkan **Compare change** dan kita perlu memilih
    
    * Compare branch (*feature branch*)
        
    * Base branch (*main branch*)
        
3. Pilih `my_branch` sebagai ***compare***, dan `main` sebagai ***base*** untuk kita *merge* `my_branch` kepada `main`.
    
4. Selepas itu Github akan memaparkan seksyen dimana jika kod anda melepasi *testing* dan juga kod anda perlu melalui ***code review*** (*approval* boleh dibuat oleh sesiapa sahaja yang terlibat dalam projek, atau orang tertentu.)
    
5. Selepas *Approve* dan *Submit review* diberikan oleh pengaturcara lain, maka kod anda telah bersedia untuk dicantukan kepada *base branch* yang telah ditetapkan.
    
6. Tekan *Merge pull request* dan kod akan dicantumkan. Siap!
    

## Mengapa perlu sedemikian?

Anda sedia maklum bahawa penggunaan Git dapat membantu projek yang besar dan melibatkan ramai pengaturcara. Github telah menjadi sebuah tempat dimana sumber kod disimpan dan digunakan untuk tujuan *deployment*. Maka amat mustahak kod-kod ini dijaga dan dilindungi daripada sebarang kesilapan dan masalah yang boleh menyebabkan kod-kod legasi tadi mengalami ralat.

PR secara tidak langsung mencipta satu lapisan (boleh jadi beberapa lapisan) yang menjadi penghalang sebelum sesebuah *feature* atau penambahan berlaku ke dalam kod yang asal.

Dalam *code review*, pengaturcara lain boleh menyemak struktur kod tersebut samada boleh diterima, tidak baik atau memerlukan penambah baikan. Disini juga pengaturcara boleh mengkritik mengenai kod yang ditulis sekaligus menjadi tempat perbincangan.

*Code testing* pula boleh di *setup* bagi memeriksa kod yang ditulis seperti, memenuhi kriteria cara penulisan kod untuk projek tersebut, atau menyemak samada kod tersebut tidak terdedah kepada penyelewengan dan sebagainya.

Anda boleh menetapkan peraturan-peraturan sesebuah *branch* di *Setting* dan pilih *Branch* untuk menentukan bagaimana *branch* tersebut dilindungi.

Sekian itu saja daripada saya. Cuba lakukan PR anda sendiri dan komen jika artiken ini membantu. Selamat mencuba.

# Sumber

1. Rajah: [https://wac-cdn.atlassian.com/dam/jcr:c6db91c1-1343-4d45-8c93-bdba910b9506/02%20Branch-1%20kopiera.png?cdnVersion=1031](https://wac-cdn.atlassian.com/dam/jcr:c6db91c1-1343-4d45-8c93-bdba910b9506/02%20Branch-1%20kopiera.png?cdnVersion=1031)
