SavefileArchive
USD/IDR ...
|
BTC ...
|
ETH ...
|
GOLD/gram ...
Terbaru
SavefileArchive — Tutorial coding, tips programming, dan dunia musik untuk developer & pecinta musik Indonesia
Git Merge Conflict: Cara Resolve dengan Tenang dan Tidak Panik

Git Merge Conflict: Cara Resolve dengan Tenang dan Tidak Panik

Git Merge Conflict: Cara Resolve dengan Tenang dan Tidak Panik

Ilustrasi Git Merge Conflict

Kamu baru saja jalankan git merge atau git pull, dan terminal menampilkan pesan yang bikin jantung berdegup kencang:

Auto-merging src/components/UserProfile.tsx
CONFLICT (content): Merge conflict in src/components/UserProfile.tsx
Automatic merge failed; fix conflicts and then commit the result.

Tenang. Merge conflict bukan bencana — ini hanya Git yang bilang "ada dua versi berbeda dari file yang sama, kamu yang harus putuskan mana yang benar." Begitu kamu paham strukturnya, resolve conflict jadi hal yang rutin.


1. Memahami Struktur Conflict Marker

// Saat ada conflict, Git menambahkan marker ini ke file:

function getUserName(user) {
<<<<<<< HEAD
  // Versi kamu (branch yang sedang aktif)
  return user.firstName + ' ' + user.lastName;
=======
  // Versi dari branch yang di-merge
  return `${user.firstName} ${user.lastName}`.trim();
>>>>>>> feature/user-profile

  // Penjelasan marker:
  // <<<<<<< HEAD          → awal versi kamu
  // =======               → pemisah antara dua versi
  // >>>>>>> branch-name   → akhir versi dari branch lain
}

Untuk resolve, kamu harus:

  1. Pilih salah satu versi, atau gabungkan keduanya
  2. Hapus semua marker (<<<<<<<, =======, >>>>>>>)
  3. Simpan file
  4. Stage dan commit

2. Cara Resolve: Dari Manual sampai Visual Tool

Cara 1: Edit Manual di Text Editor

# Lihat semua file yang conflict
git status

# Buka file, cari marker <<<<<<< dan edit manual
# Setelah selesai, stage file yang sudah di-resolve
git add src/components/UserProfile.tsx

# Setelah semua conflict resolved, commit
git commit
# Git otomatis membuat commit message merge, tinggal save dan close editor

Cara 2: VS Code (Paling Mudah)

# VS Code otomatis mendeteksi conflict dan menampilkan UI:
# - "Accept Current Change"   → pakai versi HEAD (kamu)
# - "Accept Incoming Change"  → pakai versi branch lain
# - "Accept Both Changes"     → gabungkan keduanya
# - "Compare Changes"         → lihat diff side by side

# Setelah resolve di VS Code, lanjut di terminal:
git add .
git commit

Cara 3: git mergetool

# Konfigurasi mergetool sekali saja
git config --global merge.tool vimdiff
# Atau: vscode, intellij, kdiff3, meld

# Jalankan untuk semua file yang conflict
git mergetool

# Setelah selesai
git commit

Cara 4: Pilih Satu Versi Sepenuhnya

# Pakai versi kamu sepenuhnya (abaikan incoming changes)
git checkout --ours src/components/UserProfile.tsx

# Pakai versi branch lain sepenuhnya (abaikan versi kamu)
git checkout --theirs src/components/UserProfile.tsx

# Setelah pilih
git add src/components/UserProfile.tsx
git commit

3. Skenario Conflict yang Sering Terjadi

Skenario 1: Conflict di package.json / package-lock.json

# package-lock.json conflict hampir selalu bisa di-resolve otomatis
# Jangan edit manual! Gunakan cara ini:

# 1. Pilih salah satu versi package.json (biasanya gabungkan dependencies)
# 2. Hapus package-lock.json yang conflict
git checkout --ours package.json  # atau --theirs
git rm package-lock.json

# 3. Generate ulang package-lock.json
npm install

# 4. Stage semua
git add package.json package-lock.json
git commit

Skenario 2: Conflict di File yang Sama Diedit Banyak Orang

# Strategi: resolve satu per satu, jangan terburu-buru

# Lihat history kedua branch untuk konteks
git log --oneline HEAD...feature-branch

# Lihat siapa yang mengubah apa
git log -p src/components/UserProfile.tsx

# Kalau tidak yakin, tanya ke rekan yang membuat perubahan
# sebelum memutuskan versi mana yang benar

Skenario 3: Conflict Setelah Rebase

# Rebase conflict berbeda dari merge conflict
# Conflict muncul satu per satu untuk setiap commit

# Setelah resolve conflict di file:
git add [file yang sudah di-resolve]
git rebase --continue  # Lanjut ke commit berikutnya

# Jika ingin batalkan rebase sepenuhnya:
git rebase --abort

# Tips: jika conflict terlalu banyak, pertimbangkan merge biasa
# daripada rebase

4. Cara Mencegah Conflict di Masa Depan

# 1. Pull dari main secara rutin (jangan biarkan branch terlalu jauh)
git fetch origin
git rebase origin/main  # atau git merge origin/main

# 2. Buat branch yang fokus dan kecil
# Branch yang hidup lama = conflict yang besar

# 3. Komunikasi dengan tim
# Kalau mau refactor file besar, beritahu tim dulu

# 4. Gunakan feature flags untuk fitur besar
# Merge ke main lebih sering tapi fitur belum aktif

# 5. Pisahkan concerns di file yang berbeda
# Satu file = satu tanggung jawab = lebih jarang conflict

5. Perintah Git yang Berguna Saat Conflict

# Lihat semua file yang conflict
git diff --name-only --diff-filter=U

# Lihat conflict dalam format yang lebih jelas
git diff

# Batalkan merge dan kembali ke state sebelumnya
git merge --abort

# Lihat versi file dari branch tertentu tanpa merge
git show origin/main:src/components/UserProfile.tsx

# Cek apakah masih ada conflict marker yang tertinggal
grep -r "<<<<<<" src/

Kesimpulan

Merge conflict adalah bagian normal dari kerja tim dengan Git. Semakin sering kamu menghadapinya, semakin cepat kamu resolve-nya. Kunci utamanya: pahami apa yang diubah di kedua sisi sebelum memutuskan versi mana yang benar, dan jangan ragu untuk bertanya ke rekan tim jika tidak yakin. Conflict yang di-resolve dengan terburu-buru tanpa pemahaman bisa menghilangkan kode penting.