Saya mendasarkan repo Git saya pada model percabangan Git yang sukses dan bertanya-tanya apa yang terjadi jika Anda memiliki situasi ini:
Katakanlah saya sedang mengembangkan pada dua cabang fitur A dan B, dan B membutuhkan kode dari A. Node X memperkenalkan kesalahan pada fitur A yang mempengaruhi cabang B, tetapi ini tidak terdeteksi pada node Y di mana fitur A dan B digabung dan pengujian dilakukan sebelum bercabang lagi dan mengerjakan iterasi berikutnya.
Akibatnya, bug ditemukan di node Z oleh orang-orang yang bekerja pada fitur B. Pada tahap ini diputuskan bahwa perbaikan bug diperlukan. Perbaikan ini harus diterapkan pada kedua fitur, karena orang yang bekerja pada fitur A juga perlu bug diperbaiki, karena itu bagian dari fitur mereka.
Haruskah cabang perbaikan bug dibuat dari fitur A node terbaru (yang bercabang dari node Y) dan kemudian digabungkan dengan fitur A? Setelah itu kedua fitur digabung menjadi pengembangan lagi dan diuji sebelum bercabang?
Masalahnya adalah ini membutuhkan kedua cabang untuk bergabung untuk memperbaiki masalah. Karena fitur B tidak menyentuh kode pada fitur A, apakah ada cara untuk mengubah histori pada simpul Y dengan menerapkan perbaikan dan masih memungkinkan cabang fitur B tetap tak tergabung namun memiliki kode tetap dari fitur A?
Terkait ringan: Konvensi percabangan bug Git
Jawaban:
Gunakan komit yang berbeda untuk memperbaiki bug di satu cabang, lalu pilih ceri yang komit ke cabang lain.
sumber
Bisa dibilang, tidak ada bug di A atau X. Perbaiki bug di cabang B di mana ia ditemukan. Perbaikan akan menyebar ke X dan A dalam kegiatan normal.
sumber
Meskipun bukan alur kerja yang populer
git
, alur kerja yang populer di Mercurial adalah memperbarui ke revisiX
, memperbaiki bug di sana (sebagaiX
2 ) dan kemudian mengulangi penggabunganY
(yang seharusnya merupakan gabungan dari Mercurial).Bahkan, alur kerja ini lebih mudah
git
karena setelah semua orang beralih dariY
keY
2 maka referensi ke aslinyaY
akan hilang dan pada akhirnya akan menjadi sampah yang dikumpulkan. Di dalamhg
Anda harus menghapus komitmen tersebut secara manual untuk merapikan repositori Anda.sumber