Bagikan melalui


Menggabungkan strategi dan menggabungkan squash

Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Ketika Anda menyelesaikan permintaan pull, Anda menggabungkan cabang topik ke cabang default Anda, biasanya main. Penggabungan ini menambahkan penerapan cabang topik ke cabang utama Anda dan membuat penerapan penggabungan untuk mendamaikan konflik apa pun antara cabang default dan topik. Komentar dan diskusi dalam permintaan pull memberikan konteks tambahan untuk perubahan yang dilakukan di cabang topik.

Contoh penggabungan reguler dari permintaan pull.

Riwayat penerapan di cabang Anda main (atau cabang default lainnya) tidak mengikuti garis lurus, karena riwayat cabang topik terkait. Ketika proyek tumbuh lebih besar, jumlah cabang topik yang dikerjakan pada saat yang sama meningkat, membuat riwayat cabang default semakin sulit diikuti.

Cabang default adalah representasi yang akurat dari riwayat setiap cabang topik, tetapi sulit untuk digunakan untuk menjawab pertanyaan yang lebih luas tentang pengembangan proyek Anda.

Penggabungan squash

Penggabungan squash adalah opsi penggabungan yang memungkinkan Anda untuk mengembun riwayat Git cabang topik ketika Anda menyelesaikan permintaan pull. Alih-alih setiap penerapan pada cabang topik ditambahkan ke riwayat cabang default, penggabungan squash menambahkan semua perubahan file ke satu penerapan baru pada cabang default. Penerapan penggabungan Squash tidak memiliki referensi ke cabang topik, itu akan menghasilkan penerapan baru yang berisi semua perubahan dari cabang topik. Selain itu, disarankan untuk menghapus cabang topik untuk mencegah kebingungan.

Diagram penggabungan squash dalam permintaan pull di Azure Repos.

Cara sederhana untuk memikirkan hal ini adalah penggabungan squash memberi Anda hanya perubahan file, dan penggabungan reguler memberi Anda perubahan file dan riwayat penerapan.

Bagaimana penggabungan squash berguna?

Penggabungan squash menjaga riwayat cabang default Anda tetap bersih dan mudah diikuti tanpa menuntut perubahan alur kerja apa pun di tim Anda. Kontributor cabang topik bekerja seperti yang mereka inginkan di cabang topik, dan cabang default menyimpan riwayat linier melalui penggunaan penggabungan squash. Riwayat penerapan cabang yang main diperbarui dengan penggabungan squash memiliki satu penerapan untuk setiap cabang gabungan. Anda dapat menelusuri riwayat ini untuk mengetahui kapan tepatnya pekerjaan dilakukan.

Pertimbangan saat penggabungan squash

Penggabungan squash mengembun riwayat perubahan di cabang default Anda, jadi penting untuk bekerja dengan tim Anda untuk memutuskan kapan Anda harus melakukan squash merge atau ketika Anda ingin menyimpan riwayat penerapan penuh dari cabang topik. Saat penggabungan squash, ini adalah praktik yang baik untuk menghapus cabang sumber. Menghapus cabang sumber mencegah kebingungan karena cabang topik itu sendiri tidak memiliki penerapan yang menggabungkannya ke dalam cabang default.

Menyelesaikan permintaan pull dengan penggabungan squash

Anda dapat memilih untuk melakukan squash merge saat menyelesaikan permintaan pull di Azure Repos.

Pilih Penerapan Squash di bawah Jenis penggabungan dalam dialog Selesaikan permintaan pull untuk menyatukan cabang topik.

Cuplikan layar menutup permintaan pull dengan penggabungan squash di Azure Repos.

Beberapa basis penggabungan

Tab File dalam permintaan pull mendeteksi perbedaan dengan perbandingan tiga sisi. Algoritma memperhitungkan penerapan terakhir di cabang target, penerapan terakhir di cabang sumber, dan basis penggabungan umum mereka (yaitu leluhur umum terbaik). Algoritma adalah metode deteksi perubahan yang cepat, hemat biaya, dan andal. Sayangnya, dalam beberapa kasus, ada lebih dari satu basis sejati. Di sebagian besar repositori situasi ini jarang terjadi, tetapi di repositori besar dengan banyak pengguna aktif, itu bisa menjadi umum. Anda dapat memeriksa secara manual apakah beberapa basis penggabungan antara cabang ada. Untuk melakukannya, jalankan git merge-base --all feature master perintah. Azure DevOps mendeteksi adanya beberapa basis penggabungan untuk setiap PR. Ketika ini terdeteksi, Azure DevOps menampilkan pesan "Beberapa basis penggabungan terdeteksi. Daftar penerapan yang ditampilkan mungkin tidak lengkap" untuk PR. Saat Azure DevOps menjalankan deteksi beberapa basis penggabungan, Azure DevOps tidak memeriksa apakah potensi basis penggabungan sudah digabungkan atau tidak. Pemeriksaan tersebut dilakukan oleh git merge-base. Inilah sebabnya mengapa Azure DevOps dapat menampilkan pesan bahkan ketika git merge-base hanya melaporkan satu basis penggabungan.

Catatan

Jika Anda kehilangan perubahan selama peninjauan PR, pastikan bahwa beberapa basis penggabungan bukan akar penyebabnya.

Skenario berikut terdeteksi oleh Azure DevOps sebagai beberapa basis (basis penggabungan ditunjukkan oleh angka 1 dan 2):

  • Gabungan silang (juga dikenal sebagai criss-cross) antara cabang yang berbeda (dilaporkan oleh Azure DevOps serta git merge-base)
---1---o---A
    \ /
     X
    / \
---2---o---o---B
  • Penggabungan satu cabang ke dua cabang lainnya (dilaporkan oleh Azure DevOps, tetapi tidak dengan git merge-base itu menghilangkan basis penggabungan 2)
---1---o---o---o---A
    \         /
     \-------2
      \       \
       \---o---o---o---B
  • Menangani aftermath cabang utama kembali, misalnya mengubah penerapan penggabungan
*   42bb2d2 (HEAD, A) Amended merge commit
|\  
| | *   67c9bb8 (other) Merge branch 'A' into B
| | |\  
| |/ /  
|/| /   
| |/    
| * fa78e32 add second commit
* | 15845c9 add first commit
|/  
* 6a52130 add init
  • Penggunaan kembali cabang fitur secara aktif
  • Manipulasi non-intuitif dan berkonvolusi lainnya dengan mengembalikan, memilih ceri, dan menggabungkan

Beberapa deteksi dasar penggabungan adalah bagian dari kesadaran keamanan. Jika ada beberapa basis penggabungan, algoritma file-diff untuk antarmuka pengguna mungkin tidak mendeteksi perubahan file dengan benar, tergantung pada dasar penggabungan mana yang dipilihnya. Jika file dalam permintaan pull memiliki versi yang berbeda antara basis penggabungan, beberapa peringatan dasar penggabungan terjadi.

Harap tinjau dokumentasi git resmi untuk detail selengkapnya.

Potensi risiko keamanan penggabungan dari beberapa basis

  • Pengguna berbahaya dapat menyalahgunakan algoritma UI untuk melakukan perubahan berbahaya yang tidak ada di PR.
  • Jika perubahan yang diusulkan dalam PR sudah ada di cabang target, perubahan tersebut ditampilkan di tab File , tetapi mungkin tidak memicu kebijakan cabang yang dipetakan ke perubahan folder.
  • Dua set perubahan pada file yang sama dari beberapa basis penggabungan mungkin tidak ada di PR. Kasus itu mungkin menciptakan kesenjangan logika yang berbahaya.

Cara mengatasi masalah beberapa basis penggabungan

Memiliki beberapa basis penggabungan tidak selalu buruk, tetapi Anda harus memeriksa kembali bahwa semuanya baik-baik saja. Untuk menyingkirkan beberapa basis penggabungan, ikat cabang ke satu leluhur umum dengan mengubah cabang Anda pada target, atau menggabungkan target ke cabang Anda. Tindakan tersebut menyingkirkan pesan peringatan dan membantu Anda memeriksa apakah perubahan aktual baik-baik saja.

Salah satu pendekatannya adalah dengan mereset dan menyimpan kemajuan Anda sebelum melakukan rebasing atau penggabungan. Anda kemudian dapat membuat cabang baru atau melakukan rebase yang kosong, dan menerapkan perubahan Anda dari titik yang jelas. Proses ini mungkin memerlukan dorongan paksa ke jarak jauh jika perubahan Anda sudah ada.

Cara menghindari masalah beberapa basis penggabungan

Berikut adalah tips umum untuk menghindari beberapa masalah dasar penggabungan:

  • Saat menyiapkan permintaan pull, buat cabang fitur dari versi terbaru cabang utama atau rilis.
  • Hindari membuat cabang yang tidak berasal langsung dari cabang stabil repositori Anda, kecuali diperlukan.

Apa yang harus dilakukan jika beberapa masalah dasar penggabungan muncul kembali

Dalam repositori besar dengan banyak kontributor aktif, masalah ini bisa sangat tidak nyaman. Bahkan jika Anda menyingkirkan beberapa basis melalui penggabungan, situasi mungkin muncul kembali. Jika seseorang menutup permintaan pull yang sudah lama ada, itu dapat membuat ulang situasi. Meskipun kebijakan build dan pengujian sedang berjalan, Anda tidak memiliki cara untuk menyelesaikan permintaan pull. Mengatur ulang dan memulai cabang baru mungkin membantu. Jika tidak ada yang diubah, perubahan Anda mungkin jelas, bahkan jika situasi berulang.

Langkah berikutnya