Penggabungan (merge) — apa itu, cara kerja merge dan strategi penggabungan

Penulis: IT Sectr Diterbitkan: 2026-08-01 Waktu membaca: 9 mnt

Merge — adalah operasi penggabungan cabang di Git yang menggabungkan perubahan dari dua jalur pengembangan berbeda ke dalam satu cabang target. Berbeda dengan rebase, merge mempertahankan sejarah percabangan lengkap dengan membuat merge-commit khusus dengan dua induk. Menurut dokumentasi resmi Git (2026), merge adalah cara paling aman untuk menggabungkan cabang karena tidak menimpa sejarah dan memungkinkan pelacakan kapan dan cabang mana yang digabungkan. Ini adalah pilihan standar untuk penggabungan di cabang publik seperti main, develop, dan release.

Poin utama

  • Merge — penggabungan cabang dengan membuat merge-commit yang mempertahankan sejarah kedua cabang.
  • Merge-commit — commit khusus dengan dua induk yang mencatat fakta penggabungan.
  • Strategi penggabungan — recursive, octopus, ours, squash — masing-masing cocok untuk skenario berbeda.
  • Konflik — muncul saat perubahan simultan pada baris yang sama di kedua cabang dan memerlukan penyelesaian manual.
  • Keamanan — merge tidak mengubah commit yang ada, sehingga aman untuk cabang publik.

Apa itu merge di Git

Merge — adalah perintah git merge yang menggabungkan perubahan dari cabang yang ditentukan ke dalam cabang saat ini. Git menemukan leluhur bersama (commit dasar bersama), menghitung diff setiap cabang relatif terhadap leluhur, dan membuat merge-commit yang berisi kumpulan perubahan gabungan. Hasilnya — cabang target dilengkapi dengan semua perubahan dari cabang yang digabungkan.

Sintaks: berada di cabang target (misalnya main), jalankan git merge feature. Git secara otomatis membuat merge-commit jika tidak ada konflik. Dalam pesan default merge-commit tertulis: “Merge branch ’feature’ into main”. Pesan dapat diubah melalui flag -m atau diedit di editor yang terbuka.

Merge adalah operasi non-destruktif. Berbeda dengan rebase, merge tidak menyentuh commit yang ada: commit tetap dengan hash, penulis, dan tanggal yang sama. Ini menjadikan merge satu-satunya cara aman untuk menggabungkan cabang yang dikerjakan oleh beberapa pengembang secara bersamaan. Jika ada yang salah, merge dapat dibatalkan dengan perintah git merge --abort.

bash
# Beralih ke cabang target
git checkout main

# Gabungkan cabang fitur
git merge feature

# Hasil — merge-commit dengan dua induk
git log --oneline --graph

# Gabungkan dengan pesan kustom
git merge feature -m "feat: integrate authentication module"

Jenis merge: regular, squash, fast-forward

Git mendukung tiga mode penggabungan yang dipilih tergantung pada hasil yang diinginkan. Regular merge (default) membuat merge-commit. Squash merge menggabungkan semua commit cabang fitur menjadi satu. Fast-forward — memindahkan pointer cabang tanpa membuat commit, jika memungkinkan. Pemilihan mode tergantung pada workflow tim dan aturan sejarah.

Regular merge (--no-ff) — membuat merge-commit bahkan jika penggabungan dapat dilakukan sebagai fast-forward. Direkomendasikan untuk cabang main: merge-commit secara eksplisit menandai momen integrasi fitur dan memungkinkan pengembalian mudah semua perubahan cabang fitur dengan satu revert pada merge-commit. GitHub menggunakan mode ini secara default saat menggabungkan PR melalui tombol Merge.

Squash merge (--squash) — mengumpulkan semua commit cabang fitur menjadi satu commit di cabang target. Berguna ketika sejarah kasar cabang fitur tidak boleh masuk ke main. Kekurangan: koneksi dengan commit asli hilang — tidak dapat melihat bagaimana fitur dikembangkan langkah demi langkah. GitHub menggunakan mode ini saat memilih “Squash and merge” di PR.

Fast-forward (--ff) — jika cabang target tidak memiliki commit baru setelah percabangan fitur, Git hanya memindahkan pointer ke depan, tanpa membuat merge-commit. Sejarah tetap linier. Flag --no-ff memaksa pembuatan merge-commit, --ff-only akan berakhir dengan error jika fast-forward tidak memungkinkan.

bash
# Paksa merge-commit (direkomendasikan untuk main)
git merge --no-ff feature

# Squash merge — semua commit menjadi satu
git merge --squash feature
git commit -m "feat: add authentication"

# Fast-forward hanya jika memungkinkan
git merge --ff-only feature

# Batalkan merge yang berkonflik
git merge --abort

Strategi penggabungan Git

Strategi penggabungan menentukan algoritma yang digunakan Git untuk menggabungkan perubahan. Setiap strategi cocok untuk skenario yang berbeda. Git secara otomatis memilih strategi yang sesuai, tetapi pengembang dapat menentukannya secara eksplisit melalui flag --strategy. Memahami strategi membantu memprediksi perilaku Git pada penggabungan yang kompleks.

Recursive — strategi default untuk menggabungkan dua cabang. Git menemukan leluhur bersama, menghitung perubahan di setiap cabang, dan menggabungkannya. Jika leluhur bersama ditemukan, recursive menangani dengan benar penggantian nama file dan penambahan file baru. Pada konflik, recursive dapat menggunakan opsi tambahan: ours (secara otomatis memilih versi kita) dan theirs (memilih versi mereka).

Octopus — untuk penggabungan simultan lebih dari dua cabang: git merge feature1 feature2 feature3. Octopus tidak mendukung resolusi konflik — semua konflik harus diselesaikan sebelum pemanggilan perintah. Jarang digunakan, terutama untuk menggabungkan beberapa cabang independen yang dijamin tidak bertentangan (misalnya modul berbeda).

StrategiJumlah cabangResolusi konflik
Recursive2Otomatis + opsi ours/theirs
Octopus3+Tidak — semua konflik harus diselesaikan sebelumnya
OursBerapa punSelalu memilih versi kita, perubahan pihak lain diabaikan
Subtree2Untuk penggabungan sub-pohon (subtree merge)

Ours — strategi khusus yang sepenuhnya mengabaikan perubahan dari cabang yang digabungkan dan mempertahankan konten saat ini dari cabang target. Merge-commit dibuat, tetapi konten tetap tidak berubah. Berguna ketika Anda perlu mencatat fakta penggabungan dalam sejarah tetapi secara praktis menolak semua perubahan dari cabang lain.

Menyelesaikan konflik merge

Konflik merge terjadi ketika baris yang sama dari sebuah file diubah secara berbeda di kedua cabang. Git tidak dapat secara otomatis menentukan versi mana yang benar dan menjeda merge. Konflik juga dapat terjadi saat penggantian nama file di satu cabang dan perubahannya di cabang lain, atau saat penghapusan dan modifikasi simultan dari file yang sama.

Proses penyelesaian: Git menandai file yang berkonflik dengan marker. Di file muncul bagian dengan <<<<<<< HEAD (versi kita), ======= (pemisah), dan >>>>>>> feature (versi mereka). Pengembang secara manual mengedit bagian konflik, memilih baris yang diperlukan dari kedua versi, menghapus marker, menyimpan file, dan menambahkannya ke indeks melalui git add.

Untuk resolusi konflik visual, Git mendukung mergetool — alat perbandingan eksternal. Alat mergetool populer: Meld, KDiff3, Beyond Compare, VS Code (editor konflik bawaan). Mergetool menampilkan tiga panel: versi kita, versi mereka, dan hasilnya. Pengembang secara visual memilih blok kode untuk dimasukkan ke dalam file akhir.

bash
# Mulai merge dan deteksi konflik
git merge feature
# KONFLIK (konten): Konflik merge di src/main.swift

# Periksa file yang berkonflik
git status

# Buka mergetool visual
git mergetool

# Setelah resolusi — tambah dan commit
git add src/main.swift
git commit

# Batalkan merge
git merge --abort

Kapan memilih merge daripada rebase

Merge lebih diutamakan daripada rebase dalam beberapa situasi kunci. Pertama: saat bekerja dengan cabang publik yang dapat diakses oleh pengembang lain. Merge tidak menimpa sejarah, dan rekan kerja dapat melakukan sinkronisasi dengan aman. Rebase di cabang publik akan menciptakan sejarah yang divergen dan konflik bagi semua orang yang sudah menerima commit lama.

Situasi kedua: saat menyelesaikan cabang fitur. Sebagian besar tim lebih memilih merge (dengan flag --no-ff) ke main untuk mencatat momen integrasi fitur. Ini menyederhanakan navigasi melalui sejarah dan memungkinkan pengembalian mudah seluruh fitur dengan satu git revert dari merge-commit. GitHub Flow secara default menawarkan tiga opsi merge: merge sederhana, squash merge, dan rebase merge.

Situasi ketiga: saat bekerja dengan pull request yang telah melalui review. GitHub dan GitLab menawarkan tombol merge dengan berbagai opsi. Merge (Create a merge commit) — sejarah lengkap dengan merge-commit. Squash and merge — sejarah bersih tanpa detail pengembangan. Rebase and merge — sejarah linier tanpa merge-commit, tetapi dengan penimpaan commit. Pilihan tergantung pada aturan tim.

  • Cabang publik (main, develop) — hanya merge, jangan pernah rebase.
  • Menyelesaikan PR — merge dengan --no-ff untuk mencatat momen integrasi.
  • Cabang dengan commit pihak lain — merge tidak menimpa pekerjaan orang lain.
  • Sebelum rilis — merge lebih aman karena memiliki lebih sedikit risiko.
  • Cabang bersama — jika beberapa pengembang bekerja pada cabang, merge wajib.

Praktik terbaik penggabungan cabang

Aturan pertama: selalu berada di versi terbaru cabang target sebelum merge. Jalankan git checkout main && git pull sebelum menggabungkan fitur. Ini meminimalkan konflik dan menjamin bahwa merge-commit akan berisi semua perubahan terkini. Jika cabang target sudah jauh maju, jalankan dulu git merge main di dalam cabang fitur untuk menyelesaikan konflik dalam konteksnya.

Aturan kedua: uji kode setelah merge. Merge dapat mengubah perilaku, bahkan jika tidak ada konflik. Pipeline CI/CD harus menjalankan tes pada merge-commit sebelum dikirim ke produksi. Beberapa tim menggunakan merge gates — pemeriksaan wajib yang memblokir merge sampai lulus.

Aturan ketiga: dokumentasikan merge-commit. Pesan standar “Merge branch ’feature’ into main” kurang bermanfaat. Disarankan untuk menambahkan deskripsi tentang apa yang digabungkan: “Merge authentication module: login, registration, password recovery”. Ini menyederhanakan analisis sejarah dan pencarian regresi. Di proyek besar, merge-commit secara otomatis dihasilkan dari nama PR.

  • Kekinian — sebelum merge, pastikan cabang target telah diperbarui (git pull).
  • Pengujian — CI/CD harus menjalankan tes pada merge-commit yang dihasilkan.
  • Pesan deskriptif — sebutkan di merge-commit fitur apa yang digabungkan.
  • Frekuensi — gabungkan cabang fitur sedini dan sesering mungkin (maksimal seminggu).
  • Pembatalan — git revert dari merge-commit membatalkan seluruh fitur sepenuhnya.

Pertanyaan yang sering diajukan

Apa artinya menggabungkan (merge) cabang di Git?

Menggabungkan (merge) — menjalankan git merge untuk menggabungkan perubahan dari satu cabang ke cabang lainnya. Hasilnya adalah merge-commit yang mencatat fakta penggabungan dan berisi perubahan dari kedua cabang. Ini adalah cara utama integrasi cabang fitur ke main, develop, atau release di Git Flow.

Apa perbedaan squash merge dengan merge biasa?

Squash merge menggabungkan semua commit cabang fitur menjadi satu commit di cabang target, kehilangan sejarah pengembangan antara. Merge biasa membuat merge-commit sambil mempertahankan semua commit cabang fitur. Squash merge memberikan sejarah yang bersih tetapi tidak memungkinkan pelacakan pengembangan fitur langkah demi langkah.

Bagaimana cara menyelesaikan konflik merge di Git?

Buka file yang berkonflik, temukan bagian dengan marker <<<<<<< HEAD dan >>>>>>>. Edit kontennya, sisakan baris yang diperlukan dari kedua versi, hapus marker. Simpan file, jalankan git add dan git commit. Anda dapat menggunakan git mergetool untuk penyelesaian visual.

Kapan menggunakan merge daripada rebase?

Merge selalu digunakan untuk cabang publik (main, develop, release) karena tidak menimpa sejarah. Rebase diterapkan di cabang fitur pribadi sebelum dipublikasikan. Setelah cabang menjadi bagian dari repositori bersama dan rekan kerja merujuk padanya, hanya merge yang diizinkan.

Bagaimana cara membatalkan merge di Git?

Sebelum merge selesai (selama konflik) — git merge --abort membatalkan penggabungan sepenuhnya. Setelah selesai — git revert <merge-commit-hash> -m 1 membuat commit pembatalan. Flag -m 1 menunjukkan cabang induk mana yang dipertahankan (target). Git revert lebih aman daripada git reset untuk cabang yang sudah dipublikasikan.

Ringkasan

  • Merge — penggabungan aman cabang dengan mempertahankan sejarah dan membuat merge-commit dengan dua induk.
  • Mode penggabungan — regular (--no-ff), squash (--squash), dan fast-forward (--ff) untuk tujuan berbeda.
  • Strategi — recursive (default), octopus (3+ cabang), ours (mengabaikan perubahan pihak lain).
  • Konflik — diselesaikan secara manual melalui pengeditan bagian yang ditandai atau mergetool.
  • Keamanan — merge tidak mengubah commit yang ada, sehingga aman untuk cabang publik.
  • Squash merge — menggabungkan semua commit menjadi satu, kehilangan sejarah pengembangan antara.
  • Pembatalan merge — git revert dari merge-commit dengan flag -m 1 untuk pengembalian aman perubahan yang dipublikasikan.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga