Dari halaman manual di git-merge, ada sejumlah strategi penggabungan yang dapat Anda gunakan.
resolve - Ini hanya dapat menyelesaikan dua kepala (yaitu cabang saat ini dan cabang lain Anda menarik dari) menggunakan algoritma penggabungan 3 arah. Itu mencoba untuk hati-hati mendeteksi ambiguitas penggabungan silang dan dianggap umumnya aman dan cepat.
rekursif - Ini hanya dapat menyelesaikan dua kepala menggunakan algoritma penggabungan 3 arah. Ketika ada lebih dari satu leluhur umum yang dapat digunakan untuk penggabungan 3 arah, ia menciptakan pohon yang digabungkan dari leluhur yang sama dan menggunakannya sebagai pohon referensi untuk penggabungan 3 arah. Hal ini telah dilaporkan mengakibatkan lebih sedikit konflik penggabungan tanpa menyebabkan kesalahan penggabungan dengan pengujian yang dilakukan pada komitmen gabungan aktual yang diambil dari sejarah pengembangan kernel Linux 2.6. Selain itu, ini dapat mendeteksi dan menangani gabungan yang melibatkan penggantian nama. Ini adalah strategi penggabungan default saat menarik atau menggabungkan satu cabang.
gurita - Ini menyelesaikan lebih dari kasus dua-kepala, tetapi menolak untuk melakukan penggabungan kompleks yang membutuhkan resolusi manual. Ini terutama dimaksudkan untuk digunakan untuk bundling kepala cabang topik bersama. Ini adalah strategi penggabungan default saat menarik atau menggabungkan lebih dari satu cabang.
ours - Ini menyelesaikan sejumlah kepala, tetapi hasil penggabungan selalu kepala cabang saat ini. Ini dimaksudkan untuk menggantikan sejarah perkembangan lama dari cabang samping.
subtree - Ini adalah strategi rekursif yang dimodifikasi. Saat menggabungkan pohon A dan B, jika B berkorespondensi dengan subtree A, B pertama kali disesuaikan agar sesuai dengan struktur pohon A, alih-alih membaca pohon di tingkat yang sama. Penyesuaian ini juga dilakukan pada pohon leluhur yang sama.
Kapan saya harus menentukan sesuatu yang berbeda dari standar? Skenario apa yang terbaik untuk masing-masing?
git merge A B ...
).-X ours
ini luar biasa, hanya menyelamatkan saya satu jam kerja.Sebenarnya, hanya dua strategi yang ingin Anda pilih adalah milik kami jika Anda ingin meninggalkan perubahan yang dibawa oleh cabang, tetapi pertahankan cabang dalam sejarah, dan kurangi jika Anda menggabungkan proyek independen ke dalam subdirektori superproyek (seperti 'git-gui' dalam ' repositori git).
penggabungan gurita digunakan secara otomatis ketika menggabungkan lebih dari dua cabang. tekad ada di sini terutama karena alasan historis, dan ketika Anda terkena kasus sudut strategi penggabungan rekursif .
sumber
theirs
strategi gabungan (yaitu--strategy=theirs
), tetapi adatheirs
opsi untukrecursive
strategi gabungan standar (yaitu--strategy=recursive --strategy-option=theirs
, atau adil-Xtheirs
)."Gabungkan" vs "Rekursif" menggabungkan strategi
Rekursif adalah strategi dua kepala default saat ini, tetapi setelah beberapa pencarian saya akhirnya menemukan beberapa info tentang strategi menggabungkan "tekad".
Diambil dari buku O'Reilly Version Control with Git ( Amazon ) (diparafrasekan):
Saya telah berhasil menggabungkan pohon menggunakan "ketetapan" yang gagal dengan strategi rekursif default. Saya mendapatkan
fatal: git write-tree failed to write a tree
kesalahan, dan berkat posting blog ini ( mirror ) saya mencoba "-s resolving", yang berhasil. Saya masih tidak yakin mengapa ... tapi saya pikir itu karena saya memiliki duplikat perubahan di kedua pohon, dan menyelesaikan "melewatkan" mereka dengan benar.sumber
Karena jawaban di atas tidak menunjukkan semua detail strategi. Sebagai contoh, beberapa jawaban yang hilang rincian tentang impor
resolve
pilihan danrecursive
yang memiliki banyak sub pilihan sepertiours
,theirs
,patience
,renormalize
, dllOleh karena itu, saya akan merekomendasikan untuk mengunjungi
git
dokumentasi resmi yang menjelaskan semua fitur fitur yang mungkin:https://git-scm.com/docs/merge-strategies
sumber