gitmergemahirMahir4 mnt baca

Strategi Merge: Recursive, Ours, Octopus

Mengenal strategi merge Git dan kapan memakai ours, theirs, atau octopus.

Merge tidak selalu "recursive"

Saat kamu menjalankan git merge, Git sebenarnya MEMILIH strategi penggabungan. Defaultnya recursive (atau ort di Git versi baru): cari ancestor bersama kedua branch, lalu gabungkan perubahan dari kedua sisi baris per baris. Untuk 99% kasus, inilah yang kamu mau dan tidak perlu diubah.

KENAPA ada banyak strategi? Karena "menggabungkan" beda arti tergantung niatmu: menyatukan isi kedua sisi, memenangkan satu sisi total, atau menggabungkan banyak branch sekaligus.

Strategi ours: menutup branch tanpa mengambil isinya

bash
git merge -s ours fitur-lama

Contoh 1: branch fitur-lama berisi eksperimen yang dibatalkan tim. Kodenya tidak boleh masuk main, tapi riwayat harus mencatat branch itu pernah ada dan resmi ditutup.

bash
git switch main
git merge -s ours fitur-lama
git log --oneline -2
bash
m1a2b3c Merge branch 'fitur-lama'
a3f9c1d Commit terakhir main

Hasil merge 100% mengikuti branch-mu; perubahan branch lawan dibuang total, TAPI riwayat tetap mencatatnya "sudah digabung". KAPAN dipakai? Untuk branch kedaluwarsa yang idenya dibatalkan.

Trade-off: riwayat tetap jujur dan lengkap. Risikonya FATAL kalau salah pakai: seluruh isi branch lawan hilang diam-diam tanpa konflik dan tanpa peringatan. Aturan praktis: pakai -s ours hanya kalau 100% yakin tak satu baris pun dari branch itu dibutuhkan.

Opsi -X theirs / -X ours: otomatis menangkan satu sisi

bash
git merge -X theirs fitur

Contoh 2: tim menyetujui rewrite besar di branch fitur, dan kamu yakin versinya lebih benar di SEMUA titik konflik. Opsi ini otomatis memenangkan versi branch yang di-merge di setiap konflik, tanpa resolve manual puluhan kali.

Penting: ini BUKAN strategi, melainkan opsi strategi. Bedanya besar:

  • -s ours (strategi): abaikan SELURUH isi branch lawan, bahkan yang tidak konflik.
  • -X ours (opsi): tetap gabungkan normal, tapi menangkan versimu di tiap titik KONFLIK saja. Baris yang tidak konflik tetap digabung dari kedua sisi.

KAPAN dipakai? -X theirs saat satu sisi jelas sumber kebenaran seluruh konflik (rewrite yang disetujui, branch hasil regenerate tool). -X ours saat branch-mu paling up-to-date dan branch lawan hanya berisi perubahan kecil.

Trade-off: puluhan konflik selesai dalam satu perintah, tapi kamu tidak pernah MELIHAT apa yang dikalahkan. Satu baris penting bisa hilang tanpa sadar. Jangan pakai sebelum membaca git diff main...fitur dan memahami taruhannya.

Octopus: merge banyak branch sekaligus

bash
git merge fitur-a fitur-b fitur-c

Contoh 3: kamu release manager menggabungkan tiga fitur yang sudah di-review. Tanpa konflik, Git otomatis memakai strategi octopus: SATU merge commit dengan banyak parent.

KAPAN dipakai? Menggabungkan beberapa branch tak bersinggungan dalam satu langkah, supaya riwayat rilis punya satu titik "semua fitur masuk bersamaan".

Trade-off: satu commit rilis yang rapi, tapi octopus MENOLAK jalan kalau ada konflik sedikit pun (tidak ada resolve manual di tengahnya). Hanya untuk kasus yang sudah diverifikasi bersih; kalau konflik, gabungkan satu per satu.

Kesalahan umum: salah vs benar

SALAH: memakai -s ours padahal maksudnya -X ours.

bash
git merge -s ours fitur   # MENGHAPUS seluruh isi fitur diam-diam

Niatnya "menangkan versiku kalau konflik", tapi seluruh branch fitur dibuang total.

BENAR: pahami dulu bedanya sebelum mengetik. Kalau niatnya hanya memenangkan konflik, pakai opsi:

bash
git merge -X ours fitur   # gabung normal, menangkan versiku per konflik

SALAH: bereksperimen dengan strategi merge di branch bersama untuk "coba-coba".

BENAR: coba di clone lokal dulu, verifikasi dengan git diff dan git log --graph, baru terapkan di repo bersama. Alat tajam: kuat di tangan yang paham, berbahaya di tangan yang menebak-nebak.

Catatan teknis: jujur, sebagian besar developer tidak pernah keluar dari strategi default sepanjang kariernya. Tapi saat kamu jadi orang yang merapikan riwayat rilis atau menutup branch kedaluwarsa, pengetahuan ini membedakan "bisa Git" dengan "paham Git".

Tantangan

Bedakan -s dan -X

Tanpa menjalankan perintahnya, jelaskan dengan kata-katamu: apa beda git merge -s ours fitur dengan git merge -X ours fitur? Kapan masing-masing berbahaya jika dipakai sembarangan?