Ketika kedua jalur riwayat sama-sama bergerak setelah berpisah, penggabungan tidak lagi cukup dengan memajukan penunjuk. Git menyusun merge tiga arah, yaitu perbandingan yang melibatkan dua ujung commit dan satu leluhur bersama, lalu merekam hasilnya sebagai commit merge yang memiliki dua induk. Topik ini membahas mekanika tersebut beserta bentuk riwayat yang dihasilkannya.
Leluhur bersama sebagai titik acuan#
Merge tiga arah dinamai demikian karena melibatkan tiga snapshot: commit terakhir branch tujuan, commit terakhir branch pekerjaan, dan leluhur bersama (common ancestor), yaitu commit terakhir tempat kedua jalur masih identik. Git membandingkan kedua ujung terhadap leluhur tersebut, sehingga dapat mengetahui siapa yang mengubah apa sejak perpisahan. Perubahan pada sisi yang berbeda diterima keduanya, sedangkan perubahan pada baris yang sama oleh kedua sisi menimbulkan konflik, yang anatomi penandanya dibahas pada topik Anatomi konflik dan penuntasannya pada topik Menyelesaikan konflik.
Tanpa leluhur bersama, perbandingan hanya mampu menyatakan bahwa kedua berkas berbeda, tanpa bisa mengatakan perubahan mana yang berasal dari sisi mana. Leluhur bersama itulah yang memberikan konteks, dan itulah alasan perintah merge perlu menemukannya terlebih dahulu sebelum melakukan apa pun.
Membuat dan menggabungkan dua jalur#
Siapkan dua jalur yang berpisah dari satu commit, dengan masing-masing mengubah berkas yang berbeda agar penggabungannya bersih.
# tanggal commit ditetapkan agar keluaran contoh dapat direproduksi secara persis
export GIT_AUTHOR_DATE="2026-11-01T09:00:00+07:00"
export GIT_COMMITTER_DATE="2026-11-01T09:00:00+07:00"rm -rf /tmp/lab-tigaarah
mkdir /tmp/lab-tigaarah
cd /tmp/lab-tigaarah
git init -b main
git config user.name "Budi"
git config user.email "[email protected]"
printf "Buku resep.\n" > resep.md
printf "Daftar bahan.\n" > bahan.md
git add resep.md bahan.md
git commit -m "Kerangka awal"
git switch -c fitur-iklan
printf "Buku resep.\nCara memesan cetak.\n" > resep.md
git commit -am "Tambah catatan pemesanan"
git switch main
printf "Daftar bahan.\nGanti gramasi tepung.\n" > bahan.md
git commit -am "Perbarui gramasi tepung"
git merge fitur-iklanInitialized empty Git repository in /tmp/lab-tigaarah/.git/
[main (root-commit) 67e16bf] Kerangka awal
2 files changed, 2 insertions(+)
create mode 100644 bahan.md
create mode 100644 resep.md
Switched to a new branch 'fitur-iklan'
[fitur-iklan 637c547] Tambah catatan pemesanan
1 file changed, 1 insertion(+)
Switched to branch 'main'
[main b8d4c11] Perbarui gramasi tepung
1 file changed, 1 insertion(+)
Merge made by the 'ort' strategy.
resep.md | 1 +
1 file changed, 1 insertion(+)Pesan Merge made by the 'ort' strategy menyatakan bahwa Git tidak dapat memajukan penunjuk saja karena kedua jalur sudah berbeda, sehingga commit merge dibuat. Nama ort adalah nama strategi penggabungan bawaan Git generasi modern, yang penggantinya dipilih untuk keandalannya pada perubahan yang saling bersilangan.
Commit merge memiliki dua induk, dan hal itu dapat dilihat langsung pada metadata commit terakhir.
git show --no-patch --format="%h parents: %p" HEAD
git log --oneline --graph -55fbc396 parents: b8d4c11 637c547
* 5fbc396 Merge branch 'fitur-iklan'
|\
| * 637c547 Tambah catatan pemesanan
* | b8d4c11 Perbarui gramasi tepung
|/
* 67e16bf Kerangka awalNilai parents memuat dua hash sekaligus, yaitu ujung main dan ujung fitur-iklan pada saat merge. Grafis riwayatnya memperlihatkan bentuk wajik: dua jalur berpisah dari commit dasar dan bertemu pada commit merge. Bentuk ini yang membedakan merge tiga arah dari fast-forward, dan keduanya sah tergantung pada riwayat yang dihadapi.
Isi commit merge#
Commit merge menyimpan snapshot hasil penggabungan beserta dua induknya, tetapi tidak memuat perubahan baru yang ditulis manusia. Pesan bawaannya menjelaskan branch mana yang digabungkan, dan dapat diganti dengan opsi -m apabila konteks tambahan diperlukan. Perubahan yang terkandung di dalamnya adalah gabungan kedua sisi terhadap leluhur bersama, sehingga git show pada commit merge menampilkan perbedaan gabungan kedua jalur, bukan diff biasa satu induk.
Karena memuat dua induk, commit merge juga menjadi penanda pemulihan yang kuat: mengembalikan sebuah merge dilakukan terhadap commit merge itu sendiri dengan menyebut sisi mana yang dibatalkan. Mekanika lanjutannya dibahas bersama perintah pembatalan.
Ringkasan#
- Merge tiga arah membandingkan dua ujung commit terhadap leluhur bersama keduanya untuk menentukan sisi yang berubah.
- Hasilnya adalah commit merge dengan dua induk, dan strategi bawaan Git generasi modern bernama
ort. git log --graphmenampilkan bentuk wajik yang menjadi ciri riwayat hasil merge tiga arah.- Commit merge tidak memuat penulisan baru, melainkan rekaman gabungan dua jalur.
Referensi#
- git-merge — Git Documentation
— rujukan strategi merge, termasuk
ort. - Git Branching - Basic Branching and Merging — Pro Git — bagian Basic Merge Conflicts dan perilaku commit merge pada Pro Git.