Saat ini saya bekerja untuk perusahaan yang menggunakan VSTS untuk mengelola kode git. Cara "direkomendasikan" Microsoft untuk menggabungkan cabang adalah dengan melakukan "penggabungan squash", yang berarti bahwa semua komit untuk cabang tersebut tergencet menjadi satu komit baru yang menggabungkan semua perubahan.
Masalahnya adalah, bagaimana jika saya melakukan beberapa perubahan di satu cabang untuk satu item jaminan simpanan, maka segera ingin mulai melakukan perubahan di cabang lain untuk jaminan simpanan lain, dan perubahan itu tergantung pada set perubahan cabang pertama?
Saya bisa membuat cabang untuk item backlog itu dan mendasarkannya pada cabang pertama. Sejauh ini baik. Namun, ketika tiba saatnya untuk membuat permintaan tarikan untuk saya cabang kedua, cabang pertama telah digabung menjadi master dan karena itu telah dilakukan sebagai penggabungan squash, git menggerakkan sekelompok konflik. Ini karena git tidak melihat commit asli yang menjadi dasar dari cabang kedua, ia hanya melihat satu squash besar bergabung dan jadi untuk menggabungkan cabang kedua menjadi master, ia mencoba untuk memutar ulang semua komitmen cabang pertama di atas penggabungan squash, menyebabkan banyak konflik.
Jadi pertanyaan saya adalah, apakah ada cara untuk mengatasi ini (selain tidak pernah mendasarkan satu cabang fitur dari yang lain, yang membatasi alur kerja saya) atau apakah penggabungan squash hanya mematahkan algoritma git?
feature1
ke master, lalu ingin bergabungfeature2
nanti. Dalam hal itu, bukankah pendekatan pertama akan menghasilkan konflik ketika git mencoba untuk menerapkan kembalifeature1
komit di atas komit terjepit, sedangkan yang kedua akan memungkinkan git untuk menentukan bahwa komit tersebut tidak perlu digabung?git clone
mengambil repo dan menyalin file saya yang sudah berubah!) Karena saya bercabang dari cabang dan kemudian pengelola menghancurkan cabang pertama. Di pekerjaan saya, mereka juga melakukan penggabungan squash. Ini berarti saya tidak dapat bekerja pada fiturb
yang bergantung pada fitura
sampai fitura
digabungkan.Penggabungan squash memecah algoritma penggabungan untuk setiap cabang yang berisi komit apa pun yang dihapus oleh squash. Dengan kata lain, rebases adalah viral. Jika Anda rebase satu cabang, Anda harus rebase cabang lain yang bergantung pada cabang itu. Jika Anda menggunakan rerere , konflik gabungan apa pun yang Anda selesaikan secara manual di repo lokal Anda tidak perlu dipecahkan secara manual lagi, tetapi itu tidak membantu menyelesaikan konflik yang diselesaikan oleh orang lain.
Itu sebabnya aturan tidak tertulis kami di sini boleh-boleh saja tergencet selama tidak ada orang lain yang bergantung pada cabang fitur Anda, yang mungkin terjadi 90% dari waktu. Jika tidak, penggabungan lurus membantu semua orang menghindari masalah.
sumber
feature-xyz
cabang. Anda dapat membuatfeature-xyz-squashed
cabang mulai sama komit sebagaifeature-xyz
cabang,git cherry-pick
yang komit darifeature-xyz
kefeature-xyz-squashed
, labu mereka di sana, dan mergefeature-xyz-squashed
untukmaster
. Anda seharusnya tidak bergabungfeature-xyz
saat itu. Terkadang hal di atas masuk akal (misalnya Anda tidak ingin memasukkan komit dengan kata sandi dimasukkan), tetapi ini merupakan solusi, bukan praktik terbaik.