Git rebase vs merge adalah perdebatan yang hampir selalu muncul di tim developer. Kamu baru selesai mengerjakan fitur di branch sendiri, lalu saatnya menggabungkannya ke main. Git menyediakan dua cara: merge dan rebase. Keduanya sama-sama menggabungkan perubahan, tetapi hasil riwayat commit-nya sangat berbeda.
Pilihan yang salah bisa membuat riwayat repository berantakan, atau lebih buruk lagi, membuat pekerjaan rekan satu tim hilang. Di artikel ini kamu akan memahami cara kerja keduanya, 5 perbedaan utamanya, contoh perintah, dan kapan masing-masing sebaiknya dipakai.
Daftar Isi
- Apa Itu Git Merge?
- Apa Itu Git Rebase?
- 5 Perbedaan Git Rebase vs Merge
- Contoh Perintah Merge dan Rebase
- Kapan Memakai Merge dan Kapan Memakai Rebase?
- Aturan Emas Git Rebase
- Kesimpulan
Apa Itu Git Merge?
Git merge menggabungkan dua branch dengan membuat satu merge commit baru yang menyatukan kedua riwayat. Semua commit lama tetap utuh pada tempatnya, sehingga riwayat asli terjaga persis seperti kejadiannya.
Bayangkan branch fitur-login dibuat dari main, lalu main terus bertambah commit selama kamu bekerja. Saat di-merge, Git menambahkan satu commit penghubung. Riwayatnya terlihat bercabang lalu menyatu kembali.
Kelebihan merge adalah aman dan tidak mengubah commit yang sudah ada. Kekurangannya, riwayat bisa terlihat ramai jika banyak merge commit.
Apa Itu Git Rebase?
Git rebase memindahkan commit-commit dari branch kamu supaya seolah-olah dibuat di atas ujung branch tujuan yang terbaru. Git mengambil commit kamu, lalu memutarnya ulang (replay) satu per satu di atas main.
Hasilnya riwayat yang lurus dan rapi tanpa percabangan. Namun ada konsekuensi penting: commit yang diputar ulang sebenarnya adalah commit baru dengan hash baru. Karena itu rebase disebut “menulis ulang sejarah”.
Dokumentasi resminya bisa kamu baca di halaman git rebase pada situs Git.
5 Perbedaan Git Rebase vs Merge
1. Bentuk Riwayat Commit
Merge menghasilkan riwayat bercabang yang mencerminkan kerja paralel. Rebase menghasilkan riwayat lurus (linear) yang lebih mudah dibaca dengan git log.
2. Adanya Merge Commit
Merge biasanya membuat merge commit baru (kecuali kondisinya memungkinkan fast-forward). Rebase tidak membuat merge commit sama sekali.
3. Hash Commit Berubah atau Tidak
Pada merge, commit lama tidak berubah. Pada rebase, setiap commit yang dipindahkan mendapat hash baru. Inilah sumber utama masalah jika branch tersebut sudah dibagikan ke orang lain.
4. Cara Menangani Konflik
Saat merge, semua konflik diselesaikan sekaligus dalam satu langkah. Saat rebase, konflik bisa muncul per commit, sehingga kamu mungkin menyelesaikannya berkali-kali jika branch punya banyak commit. Sebagai gantinya, tiap penyelesaian lebih kecil dan terfokus.
5. Tingkat Risiko pada Branch Bersama
Merge relatif aman dipakai di branch yang dikerjakan banyak orang. Rebase berisiko jika dilakukan pada branch yang sudah di-push dan dipakai rekan lain, karena riwayat yang ditulis ulang bisa bentrok dengan salinan mereka.
Ringkasan Perbandingan
| Aspek | Git Merge | Git Rebase |
|---|---|---|
| Bentuk riwayat | Bercabang | Lurus |
| Merge commit | Ada | Tidak ada |
| Hash commit lama | Tetap | Berubah |
| Konflik | Sekali selesai | Bisa per commit |
| Aman untuk branch bersama | Ya | Tidak disarankan |
Contoh Perintah Merge dan Rebase
Menggabungkan dengan Merge
bash
git checkout main
git pull origin main
git merge fitur-login
Git akan menggabungkan fitur-login ke main. Jika ada konflik, perbaiki file yang bermasalah, lalu jalankan git add . dan git commit.
Menggabungkan dengan Rebase
bash
git checkout fitur-login
git rebase main
Perintah ini memindahkan commit fitur-login ke atas main terbaru. Jika muncul konflik, selesaikan lalu lanjutkan:
bash
git add .
git rebase --continue
Kalau merasa salah langkah, batalkan seluruh proses dengan:
bash
git rebase --abort
Setelah rebase selesai, kamu bisa menggabungkannya ke main dengan merge fast-forward sehingga riwayat tetap lurus:
bash
git checkout main
git merge fitur-login
Jika Branch Sudah Pernah Di-push
Karena hash commit berubah, push biasa akan ditolak. Gunakan opsi berikut dengan hati-hati, dan hanya pada branch milikmu sendiri:
bash
git push --force-with-lease
Opsi --force-with-lease lebih aman daripada --force karena menolak push jika ada commit orang lain yang belum kamu ambil.
Kapan Memakai Merge dan Kapan Memakai Rebase?
Tidak ada jawaban tunggal dalam perdebatan git rebase vs merge. Pilihannya bergantung pada situasi dan aturan tim.
Pakai merge ketika:
- Branch dipakai banyak orang, misalnya
mainataudevelop - Kamu ingin mempertahankan riwayat asli tanpa modifikasi
- Kamu masih pemula dan ingin opsi paling aman
Pakai rebase ketika:
- Kamu ingin memperbarui branch fitur milik sendiri dengan perubahan terbaru dari
main - Kamu ingin riwayat yang bersih dan lurus
- Kamu ingin merapikan commit lokal sebelum membuat pull request, misalnya dengan
git rebase -i HEAD~3
Banyak tim memakai kombinasi keduanya: rebase untuk memperbarui branch fitur secara lokal, lalu merge (atau squash merge) saat menggabungkan ke main. Jika kamu sedang menelusuri bug di riwayat yang rapi, teknik git bisect untuk menemukan commit penyebab bug akan jauh lebih mudah dijalankan.
Aturan Emas Git Rebase
Ada satu aturan yang wajib diingat: jangan rebase branch yang sudah dibagikan dan dipakai orang lain. Rebase menulis ulang commit, sehingga rekan yang sudah menarik branch tersebut akan mengalami riwayat yang tidak sinkron dan konflik yang membingungkan.
Rebase aman dipakai pada branch lokal atau branch fitur yang hanya kamu yang mengerjakan. Selebihnya, gunakan merge.
Untuk tips lain yang sering menyelamatkan proyek tim, kamu juga bisa membaca perbandingan REST API vs GraphQL yang membantu menentukan arsitektur sebelum mulai berkolaborasi di repository yang sama.
Kesimpulan
Dalam pembahasan git rebase vs merge, merge unggul dari sisi keamanan dan keaslian riwayat, sedangkan rebase unggul dari sisi kerapian riwayat. Gunakan merge untuk branch bersama, gunakan rebase untuk membersihkan dan memperbarui branch fitur milikmu sendiri, dan patuhi aturan emasnya agar tidak merusak kerja rekan tim.
Mulailah berlatih di repository percobaan agar kamu terbiasa dengan konflik dan perintah --abort. Dengan latihan, memilih antara rebase dan merge akan terasa natural. Punya pengalaman atau pertanyaan soal git? Tulis di kolom komentar.