Merge Tiga Arah (Riwayat yang Bercabang)

Menggabungkan branch ketika main sudah berubah, memahami commit merge, dan opsi --no-ff.

Part 13 dari 22 ± 30 menit Gratis

Ketika main ikut berubah

Di dunia nyata, saat kamu mengerjakan fitur, rekanmu juga menggabungkan pekerjaannya ke main. Riwayat pun bercabang (diverged):

c1 <- c2 <- c4          (main)
        \
         c3            (fitur-profil)

Penunjuk main tidak bisa sekadar digeser maju, karena main punya commit (c4) yang tidak dimiliki fitur-profil. Git membuat commit merge baru yang memiliki dua induk:

c1 <- c2 <- c4 <- M       (main)
        \         /
         c3 ------        (fitur-profil)

Cara Git menggabungkan: three-way merge

Git memakai tiga titik pembanding: (1) merge base — leluhur bersama terdekat (c2); (2) ujung main (c4); (3) ujung fitur-profil (c3). Untuk tiap berkas ia membandingkan perubahan kedua sisi terhadap base. Perubahan yang tidak bertabrakan digabung otomatis; yang bertabrakan di baris yang sama menjadi konflik (bab berikutnya).

Melakukan merge

git switch main
git merge fitur-profil -m "Gabungkan fitur-profil ke main"

Tanpa -m, Git asli membuka editor untuk pesan merge (default: Merge branch 'fitur-profil'). Di simulator, gunakan -m (atau --no-edit untuk pesan default).

Merge made by the 'ort' strategy.
 profil.html | 1 +
 1 file changed, 1 insertion(+)

ort adalah nama algoritma merge bawaan Git saat ini.

Membaca riwayat hasil merge

git log --oneline --graph --all

*   9a8b7c6 (HEAD -> main) Gabungkan fitur-profil ke main
|\
| * 3d2e1f0 (fitur-profil) Tambah halaman profil
* | b1c2d3e Tambah halaman kontak
|/
* a0b1c2d Tambah halaman utama

Di git log biasa, commit merge memiliki baris Merge: b1c2d3e 3d2e1f0 — dua induknya.

--no-ff: selalu catat penggabungan

Walau fast-forward memungkinkan, git merge --no-ff fitur memaksa pembuatan commit merge. Banyak tim memakainya agar riwayat memperlihatkan jelas "fitur X digabung di sini" dan agar seluruh fitur mudah di-revert dengan satu commit.

Merge vs rebase (pratinjau)

Merge mempertahankan riwayat apa adanya (dengan percabangan). Rebase (bab 19) menulis ulang commit agar riwayat linear. Keduanya valid; tim biasanya sepakat satu kebijakan.

Membatalkan merge yang baru saja dibuat

git reset --hard HEAD~1   # hanya bila belum di-push

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X