Push review mode menyederhanakan alur kerja git push dengan secara otomatis membuat dan mengelola Merge Request tanpa alat tambahan, sehingga meningkatkan kualitas kode dan kolaborasi.
Tinjauan kode otomatis
Di Codeup, mode AGit-Flow memungkinkan Anda membuat tinjauan kode dari command line dengan menjalankan git pr, yang membuat proses pembuatan tinjauan lebih efisien. Namun, mode ini mengharuskan Anda menginstal tool git-repo secara lokal dan menjalankan perintah tertentu. Banyak developer juga menginginkan alur kerja di mana kode yang dikirim ditinjau terlebih dahulu sebelum didorong ke branch target. Push review mode mencapai hal ini dengan secara otomatis membuat Merge Request untuk commit Anda saat menjalankan git push, tanpa memerlukan alat tambahan.
Keunggulan push review mode
Push review mode adalah metode kolaborasi kode baru di Codeup yang menawarkan pengalaman tinjauan kode yang efisien:
Bagi developer: Anda tidak perlu lagi membuat branch baru atau beralih ke browser web untuk memulai tinjauan kode. Cukup jalankan
git pushuntuk membuat Merge Request dalam satu langkah.Bagi administrator: Anda dapat mengonfigurasi repositori sehingga ketika developer
pushkode, branch tersebut tidak langsung diperbarui. Sebagai gantinya, Merge Request dibuat secara otomatis. Hal ini memastikan kualitas kode melalui proses tinjauan wajib.
Tabel berikut membandingkan push review mode dengan mode pengembangan branch standar.
Branch development mode | Push review mode | |
Commit code | Commit ke feature branch. | Commit langsung ke master branch. |
Mulai tinjauan kode | Gunakan UI web Codeup. | Jalankan |
Perbarui tinjauan kode | Perbarui feature branch. | Jalankan |
Izin yang diperlukan untuk berkontribusi | Developer atau lebih tinggi | Viewer atau lebih tinggi |
Kualitas kode | Hanya push ke branch yang dilindungi yang ditinjau. | Semua push ke branch apa pun ditinjau. |
Setelah Anda mengaktifkan push review mode di pengaturan repositori, fitur ini memberikan manfaat berikut:
Anda dapat berkontribusi kode dan membuat Merge Request tanpa membuat branch baru. Anda dapat melakukan commit perubahan langsung di master branch, sehingga menghindari beban pengelolaan branch yang berlebihan.
Menjalankan
git pushmembuat atau memperbarui Merge Request, bukan langsung mendorong perubahan ke branch.Jika kode Anda memerlukan perubahan setelah ditinjau, Anda dapat membuat commit tambahan dan menjalankan
git pushlagi untuk secara otomatis memperbarui Merge Request yang sudah ada.Pengguna dengan izin Viewer saja dapat berkontribusi kode. Karena push membuat Merge Request alih-alih menggabungkan kode secara langsung, Anda dapat memberikan izin tulis hanya kepada beberapa administrator, sementara sebagian besar developer hanya memerlukan izin baca. Model ini mengurangi risiko perubahan tidak disengaja pada repositori.
Anda dapat menggunakan
push optionuntuk mengontrol perilaku git push. Untuk informasi lebih lanjut, lihat bagian Collaboration with push review mode.
Aktifkan push review mode
Di , klik sakelar untuk mengaktifkan atau menonaktifkan push review mode.

Mengaktifkan push review mode mengubah perilaku git push. Harap pahami perubahan ini sebelum Anda mengaktifkan mode tersebut:
Setelah diaktifkan, menjalankan
git pushsecara otomatis membuat atau memperbarui Merge Request, bukan langsung memperbarui branch remote. Hal ini berlaku bahkan jika Anda memiliki izin Developer untuk repositori tersebut.Pengguna dengan role Viewer dapat menjalankan
git pushuntuk membuat Merge Request. Kode tersebut hanya akan digabungkan ke branch setelah disetujui dan digabungkan sesuai persyaratan branch.Karena
git pushmembuat Merge Request alih-alih memperbarui kode secara langsung, perintah ini tidak memicu webhook untuk event push.Anda tetap dapat menggunakan UI web Codeup untuk membuat, mengedit, atau menghapus file sebagai bagian dari alur kerja tinjauan.
Kolaborasi dengan push review mode
Contoh berikut menunjukkan cara menggunakan push review mode untuk kolaborasi pengembangan.
Pembuatan Merge Request otomatis
Anggaplah Anda memiliki tugas pengembangan baru. Dengan push review mode, alur kerjanya hanya terdiri dari dua langkah:
Kembangkan di master branch.
Jalankan
git push.
Mari kita ikuti contohnya.
Kembangkan di branch
masterrepositori contoh dan buat commit, misalnya27e76f58.$ git log commit 27e76f582ca7207a695dd8762b66ef443adcc572 (HEAD -> master) Author: Codeup User <codeup.user@example.com> Date: Tue Oct 11 10:16:18 2022 +0800 feat: new feature Signed-off-by: Codeup User <codeup.user@example.com> commit 44094ec92eb122deab5a0367552bd081540c4353 (origin/master, origin/HEAD) Author: Codeup User <codeup.user@example.com> Date: Tue Oct 11 10:09:39 2022 +0800 Initial commitKemudian, dorong perubahan ke repositori remote dengan menjalankan
git push:$ git push Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 310 bytes | 310.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 remote: +-----------------------------------------------------------------------------------+ remote: | The following tips are provided by Codeup: | remote: +-----------------------------------------------------------------------------------+ remote: | Merge request #31620 has been created, please visit: | remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31620 | remote: +-----------------------------------------------------------------------------------+ To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git * [new reference] master -> refs/merge-requests/31620/head
Seperti yang terlihat, dengan push review mode diaktifkan, git push tidak langsung memperbarui branch remote. Sebaliknya, perintah tersebut membuat Merge Request #31620. Sumber Merge Request ini adalah commit lokal terbaru Anda, dan targetnya adalah branch saat ini. Anda dapat memverifikasi hal ini di halaman detail Merge Request:

Alur kerja ini menghilangkan kebutuhan untuk membuat feature branch atau menggunakan browser web untuk membuat Merge Request, sehingga sangat menyederhanakan proses. Selain itu, karena semua push harus ditinjau sebelum digabungkan, hal ini memastikan code quality.
Pembaruan Merge Request otomatis
Saat tinjauan kode berlangsung, Anda sering kali perlu memodifikasi kode beberapa kali berdasarkan masukan reviewer. Untuk memperbarui Merge Request yang sesuai, Anda cukup menjalankan git push lagi. Mari kita lihat contohnya.
Pertama, berdasarkan commit 27e76f58, lakukan perubahan berdasarkan komentar tinjauan dan buat commit baru, e00db452.
$ git log
commit e00db4522f2d6ca5b42377ca76c7b3a7e12db8a5 (HEAD -> master)
Author: Codeup User <codeup.user@example.com>
Date: Tue Oct 11 11:09:42 2022 +0800
feat: fix comment
Signed-off-by: Codeup User <codeup.user@example.com>
commit 27e76f582ca7207a695dd8762b66ef443adcc572
Author: Codeup User <codeup.user@example.com>
Date: Tue Oct 11 10:16:18 2022 +0800
feat: new feature
Signed-off-by: Codeup User <codeup.user@example.com>
commit 44094ec92eb122deab5a0367552bd081540c4353 (origin/master, origin/HEAD)
Author: Codeup User <codeup.user@example.com>
Date: Tue Oct 11 10:09:39 2022 +0800
Initial commitKemudian, jalankan git push. Sistem secara otomatis memperbarui Merge Request dan menampilkan pesan konfirmasi.
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 340 bytes | 340.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31620 has been updated, please visit: |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31620 |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
27e76f582c..e00db4522f master -> refs/merge-requests/31620/headOutput menunjukkan bahwa push ini memperbarui Merge Request #31620. Jika Anda memeriksa halaman detailnya, versi sumber Merge Request telah berubah menjadi e00db4522, dan riwayat commit kini menampilkan dua commit. Jika diperlukan perubahan lebih lanjut, ulangi proses ini.
Create a new Merge Request
Menjalankan perintah git push berulang kali secara otomatis memperbarui Merge Request yang sudah ada. Jika Anda ingin membuat Merge Request baru alih-alih memperbarui yang sudah ada, Anda dapat menambahkan push option ke perintah tersebut. Jalankan git push -o review=new untuk membuat Merge Request baru.
Setelah melakukan perubahan lokal, jalankan git push -o review=new. Merge Request baru dengan ID #31626 dibuat.
$ git push -o review=new
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 361 bytes | 361.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31626 has been created, please visit: |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31626 |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
* [new reference] master -> refs/merge-requests/31626/headCatatan: Anda tidak dapat membuat Merge Request baru jika sudah ada Merge Request identik yang sedang terbuka.
$ git push -o review=new
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request create failed. There exists a same merge request in progress: |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31620 |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
! [remote rejected] master -> master (create MR failed)
error: failed to push some refs to 'https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git'Update a specific Merge Request
Jika Anda memiliki beberapa Merge Request terbuka untuk branch target yang sama, menjalankan git push akan gagal karena sistem tidak dapat menentukan Merge Request mana yang harus diperbarui.
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 294 bytes | 294.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: +-------------------------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-------------------------------------------------------------------------------------------------+
remote: | You need to manually specify the merge request to update because there are already |
remote: | multiple merge requests that you created earlier for the same target branch: |
remote: | |
remote: | * [ID: 31626] https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31626 |
remote: | * [ID: 31620] https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31620 |
remote: | |
remote: | Then, update specific merge request based on it's ID (MR-ID): |
remote: | git push -o review=<MR-ID> |
remote: | |
remote: | Or you can create a new one: |
remote: | git push -o review=new |
remote: +-------------------------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
! [remote rejected] master -> master (unable to determine which mr to update)
error: failed to push some refs to 'https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git'Output menunjukkan dua Merge Request terbuka untuk branch target yang sama, dengan ID 31626 dan 31620. Sistem tidak dapat menentukan Merge Request mana yang ingin Anda perbarui. Anda memiliki dua opsi:
Gunakan
-o review=newuntuk membuat Merge Request baru.Gunakan
-o review=<MR-ID>untuk menentukan ID Merge Request yang ingin Anda perbarui.
Opsi pertama telah ditunjukkan di bagian Create a new Merge Request. Mari kita lihat cara memperbarui Merge Request tertentu.
Untuk memperbarui Merge Request #31626, jalankan perintah: git push -o review=31626.
$ git push -o review=31626
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 303 bytes | 303.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31626 has been updated, please visit: |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31626 |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
0ba010f2ff..037578c634 master -> refs/merge-requests/31626/headIni memperbarui Merge Request dengan ID 31626.
Resolve update conflicts
Saat mencoba memperbarui Merge Request, Anda mungkin menemukan bahwa pengguna lain telah memperbaruinya terlebih dahulu. Untuk mencegah push Anda menimpa perubahan mereka, pembaruan tersebut akan gagal. Misalnya, jika Anda mencoba memperbarui Merge Request #31644 dengan menjalankan git push -o review=31644, Anda mungkin melihat error berikut:
$ git push -o review=31644
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 326 bytes | 326.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +--------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +--------------------------------------------+
remote: | MR is diverged with this push |
remote: +--------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
! [remote rejected] master -> master (MR is diverged with this push)
error: failed to push some refs to 'https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git'Pesan error menunjukkan bahwa push Anda telah menyimpang dari Merge Request remote. Anda memiliki dua opsi:
Ambil perubahan pengguna lain, selesaikan konflik secara lokal, lalu push lagi.
Force-update Merge Request dengan perubahan lokal Anda.
Mari kita bahas opsi pertama: mengambil perubahan remote dan menyelesaikan konflik secara lokal.
Pertama, jalankan git fetch origin refs/merge-requests/<mr-id>/head. Dalam contoh ini, mr-id adalah 31644, sehingga perintahnya adalah: git fetch origin refs/merge-requests/31644/head
$ git fetch origin refs/merge-requests/31644/head
From https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo
* branch refs/merge-requests/31644/head -> FETCH_HEADSelanjutnya, rebase perubahan lokal Anda di atas referensi yang diambil dengan menjalankan git rebase FETCH_HEAD. Operasi ini mungkin menghasilkan konflik. Jika demikian, selesaikan seperti biasa.
$ git rebase FETCH_HEAD
Successfully rebased and updated refs/heads/master.Setelah rebase berhasil, branch lokal Anda berisi perubahan remote. Sekarang, Anda dapat push lagi.
$ git push -o review=31644
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 331 bytes | 331.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31644 has been updated, please visit: |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31644 |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
a4a2cad45c..8da076fb44 master -> refs/merge-requests/31644/headAnda kini telah berhasil memperbarui Merge Request #31644.
Force-update a Merge Request
Terkadang, Anda mungkin ingin menimpa perubahan remote di Merge Request dengan versi lokal Anda. Untuk melakukannya, Anda perlu melakukan force-update.
Anda memerlukan dua informasi:
ID Merge Request. Ini adalah angka di akhir URL Merge Request. Misalnya, jika URL-nya adalah
https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31644, ID-nya adalah31644.Versi sumber saat ini dari Merge Request. Anda dapat menemukannya di halaman detail Merge Request. Dalam contoh ini, versi sumbernya adalah
8da076fb.
Kemudian, jalankan perintah git push -o review=<mr-id> -o old-oid=<old-oid>. Untuk contoh ini, perintahnya adalah git push -o review=31644 -o old-oid=8da076fb.
Perintah ini force-update Merge Request #31644 agar sesuai dengan versi lokal Anda. Hati-hati: tindakan ini menimpa perubahan yang dibuat pengguna lain. Gunakan perintah ini hanya jika Anda yakin ingin mengabaikan perubahan remote untuk menghindari menimpa pekerjaan mereka.
$ git push -o review=31644 -o old-oid=8da076fb
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31644 has been updated, please visit: |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31644 |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
8da076fb44..8da076fb44 master -> refs/merge-requests/31644/headBypass review and push directly
Jika Anda melakukan perubahan kecil, seperti memperbaiki typo dalam komentar, dan ingin melewati proses tinjauan kode, Anda dapat menggunakan perintah git push -o review=no. Perintah ini berperilaku sama seperti git push standar saat push review mode dinonaktifkan. Perhatikan bahwa Anda harus memiliki izin push langsung ke branch target untuk menggunakan opsi review=no.
Catatan penggunaan
Untuk memperbarui Merge Request, Anda harus menjadi penulis atau reviewer-nya. Jika tidak, pembaruan akan gagal.
remote: +---------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +---------------------------------------------------------------------+
remote: | Merge request #31644 update failed. |
remote: | You need to be the author or reviewer to update this merge request. |
remote: +---------------------------------------------------------------------+