Git merge vs rebase: perbedaan, contoh, dan kapan memakai masing-masing

  1. Beranda
  2. Blog
  3. Pengembangan Perangkat Lunak
Pengembangan Perangkat Lunak

Git merge vs rebase: perbedaan, contoh, dan kapan memakai masing-masing

Git merge vs rebase menentukan seperti apa riwayat proyek Anda. Lihat keduanya pada contoh yang sama dengan keluaran log nyata, pelajari satu aturan yang mencegah bencana, dan salin alur kerja tim yang aman.

7 menit baca
Git merge vs rebase: perbedaan, contoh, dan kapan memakai masing-masing
Poin penting
  • Merge menggabungkan dua branch dengan commit merge baru dan menjaga riwayat persis seperti yang terjadi.
  • Rebase memutar ulang commit Anda di atas branch lain, menghasilkan garis lurus tetapi hash commit baru.
  • Jangan pernah rebase commit yang sudah diambil orang lain.
  • Rebase branch fitur Anda sendiri sebelum membuka pull request, dan gunakan merge saat memasukkannya ke branch utama.

Branch fitur Anda tertinggal dari main dan Anda membutuhkan pekerjaan baru. Git merge vs rebase adalah pilihan antara dua cara mendapatkannya, dan keduanya benar. Bedanya ada pada tampilan riwayat setelahnya.

Kami membuat repositori kecil, menjalankan kedua perintah, dan menempelkan keluaran nyatanya di bawah, sehingga Anda membandingkan hasil alih-alih membayangkannya. Baru mengenal Git? Mulailah dengan tutorial Git untuk pemula (bahasa Inggris).

Apa yang dilakukan git merge dan git rebase

git merge mengambil ujung dua branch dan menggabungkannya. Jika keduanya punya commit baru, Git membuat commit merge dengan dua induk. Tidak ada yang sudah ada yang diubah.

git rebase mengambil commit yang hanya ada di branch Anda, menyisihkannya, memindahkan branch Anda ke ujung branch lain, lalu memutar ulang commit Anda satu per satu. Commit yang diputar ulang adalah commit baru dengan hash baru, meskipun perubahannya sama.

Git merge dalam praktik

Titik awal kami: commit A di main, dua commit (F1, F2) di feature, dan satu commit lagi (M1) yang ditambahkan ke main setelahnya. Sekarang kami merge main ke feature.

git switch feature
git merge main
git log --oneline --graph

*   f507aab Merge main into feature
|\
| * 8842fb5 M1
* | 082cc6a F2
* | 5a71e3c F1
|/
* 8766865 A

Grafik menunjukkan cerita sebenarnya: dua jalur kerja yang digabungkan. Commit asli F1 dan F2 mempertahankan hash-nya. Harganya adalah satu commit merge tambahan, dan pada proyek yang sibuk, grafiknya berubah menjadi jaring.

Git rebase dalam praktik

Titik awal yang sama, tetapi kali ini kami rebase feature di atas main.

git switch feature
git rebase main
git log --oneline --graph

* 1ff474b F2
* bf9149e F1
* 8842fb5 M1
* 8766865 A

Riwayatnya satu garis lurus, seolah Anda mulai bekerja setelah M1. Perhatikan hash-nya: F1 tadinya 5a71e3c dan sekarang bf9149e, sedangkan F2 berubah dari 082cc6a menjadi 1ff474b. Git menulis ulang keduanya, dan itulah mengapa rebase perlu kehati-hatian.

Merge vs rebase berdampingan

AspekMergeRebase
Bentuk riwayatGrafik bercabang dengan commit mergeSatu garis lurus
Commit yang adaTidak berubahDitulis ulang dengan hash baru
KonflikDiselesaikan sekali, di commit mergeMungkin perlu diperbaiki pada setiap commit yang diputar ulang
Aman di branch bersamaYaTidak
Terbaik untukMenggabungkan pekerjaan selesai ke mainMemperbarui branch sendiri sebelum review

Tips: jika ragu, tanyakan siapa lagi yang memiliki branch Anda. Jika tidak ada, rebase aman. Jika rekan sudah mengambilnya, gunakan merge.

Aturan emas rebase

Jangan rebase commit yang ada di luar repositori Anda sendiri. Setelah rebase, branch Anda tidak lagi cocok dengan salinan di server, sehingga push membutuhkan paksaan. Jika rekan membangun pekerjaan di atas commit lama, riwayatnya kini berselisih dengan riwayat Anda, dan merapikannya menyakitkan.

Rebase branch fitur pribadi Anda tidak masalah. Rebase main atau branch apa pun yang dipakai orang lain tidak boleh.

Alur kerja tim yang aman

Rutinitas ini menjaga riwayat tetap bersih tanpa mengejutkan siapa pun. Ini juga yang dipakai kebanyakan tim sebelum pipeline CI mereka, seperti pipeline di panduan GitHub Actions CI/CD (bahasa Inggris) kami.

git switch feature
git fetch origin
git rebase origin/main        # or: git pull --rebase
# fix conflicts, then: git add <file> && git rebase --continue
git push --force-with-lease   # only on your own branch

--force-with-lease menolak menimpa branch di server jika seseorang sudah melakukan push sejak fetch terakhir Anda, sesuatu yang akan dihancurkan --force biasa tanpa suara. Setelah pull request disetujui, merge ke main.

Cara membatalkan rebase yang salah

Rebase terlihat merusak, tetapi commit lama tetap berada di reflog Git untuk beberapa waktu, sehingga Anda bisa kembali.

git reflog                    # find the commit before the rebase
git reset --hard HEAD@{5}     # example position, check reflog first

Buat branch cadangan dengan git branch backup sebelum rebase berisiko, dan pemulihan menjadi satu perintah. Menjalankan database atau alat di kontainer? Lihat tutorial Docker untuk pemula (bahasa Inggris) kami.

Penutup

Merge menjaga kebenaran, rebase menjaganya rapi. Gunakan rebase untuk menyegarkan branch sendiri, merge untuk mengirimkannya, dan jangan pernah menulis ulang riwayat yang bergantung pada orang lain.

Pertanyaan yang sering diajukan

Apa perbedaan git merge dan git rebase?

Merge menggabungkan dua branch dengan commit merge dan mempertahankan semua commit yang ada. Rebase memindahkan commit Anda ke atas branch lain dan menulis ulangnya, menghasilkan riwayat linear.

Sebaiknya pakai merge atau rebase?

Rebase branch fitur Anda sendiri agar tetap terbaru, dan merge saat mengirimkannya ke branch bersama seperti main. Gunakan merge setiap kali orang lain berbagi branch tersebut.

Apakah git rebase berbahaya?

Aman di branch pribadi dan berisiko di branch bersama, karena menulis ulang hash commit. Gunakan branch cadangan dan reflog untuk memulihkan jika ada masalah.

Apa fungsi force-with-lease?

Ia melakukan force push hanya jika branch remote masih berada di tempat terakhir Anda melihatnya, sehingga Anda tidak menimpa commit baru rekan secara tidak sengaja.

Apakah rebase menghapus commit saya?

Tidak. Rebase membuat commit baru dengan perubahan yang sama, dan yang lama tetap ada di reflog sampai Git membersihkannya.

Terus belajar (artikel bahasa Inggris)

Bekerja sama dengan Stack Quora

Butuh bantuan soal pengujian, WordPress, atau SEO?

Kami membantu tim merilis perangkat lunak yang lebih baik dan mengembangkan situs mereka. Ceritakan apa yang sedang Anda kerjakan dan kami akan menyarankan langkah berikutnya yang jelas.

Teruslah membaca

Panduan lebih lanjut tentang pengujian, AI & pengembangan modern

Menikmati artikel ini? Pilih topik dan langsung masuk ke tutorial terbaru kami.

Kecerdasan buatan

Penjelasan Halusinasi AI: Mengapa Model Bahasa Memperbaiki Masalah dan Cara Menguranginya

Halusinasi AI menjelaskan: apa itu, mengapa model bahasa memproduksinya, tipe umum, cara menguranginya dengan landasan dan petunjuk, dan pemeriksaan…

Baca artikel →
DevOps

Penjelasan Variabel Lingkungan: File .env, Rahasia, dan Konfigurasi Dilakukan dengan Benar

Variabel lingkungan dijelaskan dengan contoh Python yang kami jalankan: membaca dan mengaturnya, mengapa setiap nilai berupa string, file .env, pewa…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Pembatasan Kecepatan API: Algoritma, Header, dan Penanganan 429 Kesalahan

Pembatasan laju API dijelaskan dengan simulasi yang kami jalankan: keranjang token, jendela tetap, jendela geser, respons 429, header batas laju, pe…

Baca artikel →
Otomatisasi pengujian

Mengejek dengan Python: unittest.mock, patch dan Kesalahan yang Membuat Tes Berbohong

Mengejek dengan Python dengan unittest.mock, menguji: Mock dan return_value, side_effect, menambal di mana nama digunakan, spesifikasi dan autospec,…

Baca artikel →
Pengujian perangkat lunak

Penjelasan Cakupan Kode: Cakupan Jalur vs Cabang dan Apa Arti 100% Sebenarnya

Cakupan kode dijelaskan dengan coverage.py yang sebenarnya dijalankan: cakupan garis, cabang dan kondisi, membaca laporan, mengapa cakupan 100% masi…

Baca artikel →
Basis data & SQL

DELETE vs TRUNCATE vs DROP dalam SQL: Perbedaan, Rollback dan Kapan Menggunakan Masing-Masing

DELETE vs TRUNCATE vs DROP dijelaskan dengan SQL yang diuji: apa yang dihapus, rollback, pemicu, reset identitas, kecepatan, dan perbedaan PostgreSQ…

Baca artikel →
Basis data & SQL

Penjelasan Tampilan SQL: Membuat, Menggunakan, dan Menghindari Kesalahan, Dengan Contoh

Tampilan SQL dijelaskan dengan kueri yang kami jalankan: membuat tampilan, hasil langsung, menyembunyikan kolom, kinerja, tampilan yang dapat diperb…

Baca artikel →
Pengembangan perangkat lunak

Antarmuka TypeScript vs Tipe: Perbedaan Nyata, Diuji Dengan Kompiler

Antarmuka TypeScript vs tipe, diperiksa dengan kompiler sebenarnya: apa yang bisa dilakukan keduanya, apa yang hanya bisa dilakukan satu orang, peng…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Python *args dan **kwargs: Fungsi Fleksibel Dengan Contoh Jelas

Python *args dan **kwargs dijelaskan dengan kode yang kami jalankan: pengepakan dan pembongkaran, urutan parameter, argumen hanya kata kunci dan pos…

Baca artikel →
Pengembangan perangkat lunak

Fungsi Python Lambda: Sintaks, Kegunaan Sebenarnya, dan Kapan Tidak Digunakan

Fungsi python lambda dijelaskan dengan kode yang kami jalankan: sintaksis, pengurutan dengan kunci, peta dan filter, penutupan, jebakan pengikatan a…

Baca artikel →
Kecerdasan buatan

Apa Itu Agen AI? Cara Kerjanya, Dengan Agent Loop Sederhana yang Dapat Anda Jalankan

Apa itu agen AI? Panduan sederhana tentang loop agen, alat, memori, dan pagar pembatas, dengan loop Python kecil yang kami jalankan, risiko nyata da…

Baca artikel →
DevOps

Pemantauan vs Observabilitas: Perbedaan Nyata, Dengan Log, Metrik, dan Jejak

Penjelasan pemantauan vs observabilitas: kegagalan yang diketahui dan tidak diketahui, log, metrik dan jejak, penelusuran insiden checkout, sinyal e…

Baca artikel →
DevOps

Volume Docker vs Bind Mounts: Pertahankan Data Kontainer dengan Cara yang Benar

Volume Docker vs pengikatan pengikat dijelaskan: mengapa data kontainer menghilang, volume yang diberi nama, pengikatan pengikatan, tmpfs, contoh Tu…

Baca artikel →
Otomatisasi pengujian

TDD vs BDD: Perbedaan Utama, Satu Fitur Dibangun dengan Dua Cara dan Kapan Menggunakan Masing-masing

TDD vs BDD dijelaskan dengan satu fitur diskon yang dibuat dengan dua cara: refactor merah-hijau dengan kode yang kami jalankan, skenario Mengingat-…

Baca artikel →
Pengembangan perangkat lunak

Git merge vs rebase: perbedaan, contoh, dan kapan memakai masing-masing

Git merge vs rebase dijelaskan dengan keluaran log nyata, tabel perbandingan, aturan emas rebase, dan alur kerja tim yang aman.

Baca artikel →
Pengembangan perangkat lunak

List Comprehension Python: Sintaks, Contoh, dan Kapan Harus Dihindari

List comprehension Python dijelaskan: sintaks, filter, if-else, perulangan bersarang, waktu yang diukur, dan kapan perulangan for biasa lebih baik.

Baca artikel →
Basis data & SQL

Penjelasan SQL JOIN dengan Contoh (Inner, Left, Right, Full)

Pahami SQL JOIN langkah demi langkah dengan tabel dan query contoh: INNER, LEFT, RIGHT, FULL, CROSS, dan SELF, plus kesalahan umum dan tips performa.

Baca artikel →