Setelah selesai mengerjakan fitur di branch terpisah, saatnya menggabungkan (merge) perubahan tersebut kembali ke branch utama.
# 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
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
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'"
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-mergeCara 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
# 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 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-ffsaat 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. 📜
Kursus
Git Dasar
Kategori
Branching
Durasi Pelajaran
20 menit