tutorial, git,

Git Merge dan Cara Menyelesaikan Merge Conflict

Kiki/🎮🍉⌨️🍩💻 Kiki/🎮🍉⌨️🍩💻 Sep 14, 2026 · 5 mins read
Git Merge dan Cara Menyelesaikan Merge Conflict
Share this

Setelah bekerja di branch terpisah, saatnya menggabungkan kembali perubahan ke branch utama. Di sinilah git merge berperan. Sebagian besar merge berjalan mulus secara otomatis, tapi kadang Git tidak bisa menentukan sendiri bagaimana menggabungkan perubahan yang bertabrakan — inilah yang disebut merge conflict. Kemampuan menyelesaikan konflik dengan percaya diri adalah keterampilan yang membedakan developer pemula dari yang berpengalaman.


Cara Kerja Git Merge

git merge menggabungkan histori dua branch menjadi satu. Kamu selalu menjalankan merge dari branch tujuan (branch yang akan menerima perubahan).

# Pastikan kamu di branch tujuan
git switch main

# Merge branch feature ke main
git merge feature/user-profile

Dua Jenis Merge

1. Fast-Forward Merge

Terjadi ketika branch yang di-merge adalah lanjutan langsung dari branch tujuan — tidak ada commit baru di branch tujuan sejak branch dibuat.

Sebelum:
main:    A ── B
                \
feature:         C ── D

Setelah fast-forward merge:
main:    A ── B ── C ── D
                        ↑
                      HEAD

Git cukup memajukan pointer main ke commit D. Tidak ada commit merge baru yang dibuat.

git switch main
git merge feature/login
# Output: Fast-forward

2. Three-Way Merge (Merge Commit)

Terjadi ketika kedua branch punya commit baru sejak titik percabangan. Git membuat commit merge baru yang menggabungkan keduanya.

Sebelum:
main:    A ── B ── E ── F
               \
feature:        C ── D

Setelah three-way merge:
main:    A ── B ── E ── F ── M
               \            /
feature:        C ── D ────

M adalah merge commit — commit dengan dua parent.

git switch main
git merge feature/login
# Output: Merge made by the 'ort' strategy.

Memaksa Merge Commit (No Fast-Forward)

Untuk menjaga histori branch terlihat jelas di log, gunakan --no-ff:

git merge --no-ff feature/login -m "Merge branch 'feature/login'"

Ini adalah praktik yang dianjurkan untuk tim karena membuat histori lebih mudah dibaca.


Merge Conflict: Kapan Terjadi?

Merge conflict terjadi ketika dua branch mengubah bagian yang sama dari file yang sama dengan cara berbeda, dan Git tidak bisa memutuskan versi mana yang benar.

main mengubah baris 5:    "return user.email"
feature mengubah baris 5: "return user.email.toLowerCase()"

Git: Saya tidak tahu mana yang benar. Tolong putuskan sendiri.

Menyelesaikan Merge Conflict

Langkah 1: Cek Status Konflik

git merge feature/login
# Auto-merging src/auth.js
# CONFLICT (content): Merge conflict in src/auth.js
# Automatic merge failed; fix conflicts and then commit the result.

git status
# both modified:   src/auth.js

Langkah 2: Buka File yang Konflik

Git menandai area konflik di dalam file dengan marker khusus:

function getEmail(user) {
<<<<<<< HEAD
  return user.email;
=======
  return user.email.toLowerCase();
>>>>>>> feature/login
}
  • <<<<<<< HEAD — awal bagian dari branch saat ini (main)
  • ======= — pemisah antara dua versi
  • >>>>>>> feature/login — akhir bagian dari branch yang di-merge

Langkah 3: Edit dan Pilih Versi yang Benar

Hapus semua marker konflik (<<<<<<<, =======, >>>>>>>) dan pilih versi yang benar — bisa salah satu, atau kombinasi keduanya:

// Pilih satu versi
function getEmail(user) {
  return user.email.toLowerCase();
}

// Atau gabungkan keduanya
function getEmail(user) {
  // Normalisasi email sebelum return
  return user.email.trim().toLowerCase();
}

Langkah 4: Tandai Sebagai Resolved dan Commit

# Tandai file sudah diselesaikan
git add src/auth.js

# Commit merge
git commit
# Git otomatis mengisi pesan merge commit

# Atau dengan pesan kustom
git commit -m "Merge feature/login: gunakan toLowerCase untuk email"

Tools untuk Menyelesaikan Konflik

VS Code

VS Code menampilkan UI visual untuk konflik dengan tombol:

  • Accept Current Change — pakai versi HEAD (main)
  • Accept Incoming Change — pakai versi branch yang di-merge
  • Accept Both Changes — pakai keduanya
  • Compare Changes — lihat diff side-by-side

git mergetool

# Buka tool mergetool yang dikonfigurasi
git mergetool

# Konfigurasi tool pilihan
git config --global merge.tool vimdiff
git config --global merge.tool vscode

Membatalkan Merge

# Batalkan merge yang sedang berlangsung (sebelum commit)
git merge --abort

# Undo merge yang sudah di-commit (buat revert commit)
git revert -m 1 HEAD
# -m 1 berarti kembalikan ke parent pertama (branch utama)

Tips Menghindari Konflik Besar

  1. Merge sering — semakin sering merge dari main ke feature branch, semakin kecil kemungkinan konflik besar
  2. Bagi tugas dengan baik — hindari dua orang mengerjakan file yang sama secara bersamaan
  3. Komunikasi di tim — beri tahu anggota tim jika akan mengubah file yang banyak dipakai
  4. Branch berumur pendek — branch yang hidup berhari-hari lebih rentan konflik dari branch yang hidup berjam-jam

Kesimpulan

Merge conflict bukan hal yang menakutkan — ini hanya Git yang meminta bantuan kamu untuk membuat keputusan yang tidak bisa dia buat sendiri. Dengan pemahaman yang baik tentang format marker konflik dan workflow penyelesaiannya, kamu bisa menanganinya dengan tenang.

Di artikel berikutnya, kita bahas alternatif dari merge yang sering menjadi perdebatan di komunitas Git: git rebase.

Kiki/🎮🍉⌨️🍩💻
Written by Kiki/🎮🍉⌨️🍩💻
hello I'm friend K.