Merge Branch

Merge Branch 🔀

Setelah selesai mengerjakan fitur di branch terpisah, saatnya menggabungkan (merge) perubahan tersebut kembali ke branch utama.


Alur Merge Dasar

# 1. Pastikan fitur di branch sudah selesai
git switch feature/navbar
# ... kerjakan dan commit semua perubahan ...

# 2. Pindah ke branch tujuan merge (biasanya main)
git switch main

# 3. Lakukan merge
git merge feature/navbar

# 4. Branch fitur bisa dihapus
git branch -d feature/navbar

Fast-Forward Merge

Terjadi ketika branch tujuan (main) tidak memiliki commit baru sejak branch fitur dibuat — Git cukup memajukan pointer:

Sebelum:
main:          A ← B ← C
                         \
feature/nav:              D ← E (HEAD)

Setelah git merge feature/nav:
main:          A ← B ← C ← D ← E (HEAD)
(tidak ada commit merge baru)
git merge feature/navbar
# Output: Fast-forward

Three-Way Merge

Terjadi ketika kedua branch memiliki commit yang berbeda sejak terpisah — Git membuat satu merge commit baru:

Sebelum:
main:          A ← B ← C ← F
                         \
feature/nav:              D ← E

Setelah git merge feature/nav:
main:          A ← B ← C ← F ← M (merge commit)
                         \       /
feature/nav:              D ← E
git merge feature/navbar
# Git membuka editor untuk pesan merge commit
# Biasanya cukup simpan pesan default: "Merge branch 'feature/navbar'"

Merge Conflict — Konflik Penggabungan

Konflik terjadi ketika dua branch mengubah baris yang sama pada file yang sama. Git tidak bisa otomatis memutuskan versi mana yang benar:

git merge feature/navbar
# Output:
# Auto-merging index.html
# CONFLICT (content): Merge conflict in index.html
# Automatic merge failed; fix conflicts and then commit the result.

Git menandai konflik di dalam file:

<<<<<<< HEAD
<nav class="navbar navbar-dark">
=======
<nav class="navbar navbar-light sticky">
>>>>>>> feature/navbar
  • <<<<<<< HEAD sampai ======= — versi dari branch aktif (main)
  • ======= sampai >>>>>>> feature/navbar — versi dari branch yang di-merge

Cara menyelesaikan konflik:

# 1. Buka file yang konflik dan edit manual
#    Pilih salah satu versi, atau gabungkan keduanya:
<nav class="navbar navbar-dark sticky">

# 2. Hapus semua marker konflik (<<<<<<<, =======, >>>>>>>)

# 3. Tandai konflik sudah selesai
git add index.html

# 4. Selesaikan merge
git commit

# Atau batalkan merge jika tidak jadi
git merge --abort

Opsi Merge

# Merge tanpa fast-forward — selalu buat merge commit
git merge --no-ff feature/navbar

# Merge tapi gabungkan semua commit jadi satu (squash)
git merge --squash feature/navbar
git commit -m "Tambah fitur navbar"

# Batalkan merge yang sedang berlangsung
git merge --abort

git rebase — Alternatif Merge

git rebase adalah cara lain menggabungkan branch — ia memindahkan commit dari satu branch dan "memutar ulang" di atas branch lain:

Sebelum rebase:
main:          A ← B ← C ← F
                         \
feature:                  D ← E

Setelah git rebase main:
main:          A ← B ← C ← F
                                 \
feature:                          D' ← E' (commit baru)
git switch feature/navbar
git rebase main
Aspek Merge Rebase
History Mempertahankan history asli Membuat history linear
Merge commit Ada Tidak ada
Aman di push Ya Jangan di branch yang sudah di-push
Cocok untuk Kolaborasi tim Membersihkan history lokal

💡 Tips: Gunakan --no-ff saat merge branch fitur ke main agar ada merge commit yang mencatat bahwa sekelompok commit berasal dari fitur tertentu. Ini membuat history lebih mudah dibaca dan di-revert jika perlu. 📜

Sebelumnya

Informasi Kursus

Kursus

Git Dasar

Kategori

Branching

Durasi Pelajaran

20 menit

Pelajaran dalam Kategori Ini