Merging — Git

Merge menggabungkan perubahan dari satu branch ke branch lain. Alur merge: Pindah ke branch tujuan (biasanya main) Jalankan git merge $ git checkout main $…

Merge menggabungkan pekerjaan dari satu branch ke branch lain, biasanya dari branch fitur ke main. Bayangin kamu menulis bab baru di draf terpisah, sementara naskah utama ada di meja editor. Kalau naskah utama belum disentuh sejak kamu mulai, editor tinggal memakai draf-mu sebagai naskah terbaru. Kalau naskah utama juga sudah diubah orang lain, editor harus menyatukan keduanya jadi versi baru. Git melakukan dua hal itu persis.

🧪 Tebakan cepat: di latihan, main gak dapat commit baru sejak fitur-footer dibuat. Waktu kamu menjalankan git merge fitur-footer, Git bikin commit baru atau gak? Tebak dulu, jawabannya ada di bagian "Fast-forward: main tinggal digeser".

Pindah ke branch tujuan, lalu merge

Merge selalu memasukkan branch yang kamu sebut ke branch tempat kamu berada. Jadi pindah dulu ke branch tujuan, yang mau menerima perubahan, baru sebut branch sumbernya.

git switch main          # 1. pindah ke branch tujuan (atau: git checkout main)
git merge fitur-footer   # 2. masukkan fitur-footer ke main

Contoh dari awal sampai merge

Repo-nya punya index.html dan footer.html yang berisi <footer>Copyright 2024</footer>:

git init
git add .
git commit -m "initial"
git switch -c fitur-footer                            # atau: git checkout -b fitur-footer
echo "<footer>Copyright 2025</footer>" > footer.html  # ubah isi footer
git add .
git commit -m "tambah footer"
git switch main                                       # balik ke branch tujuan
git merge fitur-footer

Output merge-nya (hash-mu pasti beda):

$ git merge fitur-footer
Updating 3f2a1c9..8b7d4e0
Fast-forward
 footer.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Fast-forward: main tinggal digeser

main di fitur-footer di
Sebelum merge initial tambah footer
Sesudah merge tambah footer tambah footer

main gak berubah sejak fitur-footer dibuat, jadi commit "tambah footer" sudah nyambung langsung di depan main. Git cukup menggeser main maju ke commit itu. Ini disebut fast-forward, dan gak ada commit baru yang dibuat. Itu jawaban tebakannya. Sekarang main punya 2 commit: "initial" dan "tambah footer", dan itulah yang dicek latihannya.

Merge commit: kalau dua-duanya sudah maju

Misalnya sebelum merge, main juga dapat commit baru: seseorang menambah about.html lewat commit "tambah halaman about". Sekarang dua jalur sudah bercabang, dan main gak bisa sekadar digeser. Git membuat merge commit: commit baru dengan dua parent, yaitu ujung main dan ujung fitur-footer.

$ git merge fitur-footer
Merge made by the 'ort' strategy.
 footer.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Sebelum baris itu muncul, Git membuka editor berisi pesan bawaan Merge branch 'fitur-footer'. Simpan dan tutup saja, atau pakai git merge --no-edit fitur-footer supaya langsung jalan.

Isinya ditentukan dengan 3-way merge. Git membandingkan tiga versi: base (commit tempat dua branch mulai berpisah), ujung branch tempat kamu berada, dan ujung branch yang di-merge. Untuk tiap baris:

Di contoh ini about.html cuma berubah di main dan footer.html cuma berubah di fitur-footer, jadi hasil merge-nya memuat keduanya.

💡 Mau jejak fiturnya kelihatan? Pakai --no-ff

git merge --no-ff fitur-footer selalu membuat merge commit, walau fast-forward sebenarnya bisa. Di history jadi kelihatan "fitur ini masuk di sini" sebagai satu kelompok commit. Banyak tim memakai cara ini untuk fitur yang besar.

⚠️ Jebakan yang sering ketemu

TL;DR: Pindah ke branch tujuan dulu (git switch main atau git checkout main), lalu git merge nama-branch: branch yang disebut masuk ke branch tempat kamu berada. Kalau tujuan belum berubah sejak branch fitur dibuat, terjadi fast-forward: pointer main cuma digeser maju, tanpa commit baru. Kalau dua-duanya sudah maju, Git membuat merge commit dengan dua parent lewat 3-way merge (base, branch-mu, branch yang di-merge). Dua sisi mengubah baris yang sama berarti conflict. --no-ff memaksa merge commit supaya jejak fiturnya kelihatan.

Yang akan kamu pelajari