Saya ingin memberikan perspektif yang berbeda tentang apa arti sebenarnya "git pull --rebase", karena kadang-kadang sepertinya hilang.
Jika Anda pernah menggunakan Subversion (atau CVS), Anda mungkin terbiasa dengan perilaku "pembaruan svn". Jika Anda memiliki perubahan untuk dikomit dan komit gagal karena perubahan telah dibuat hulu, Anda "memperbarui". Subversi dihasilkan dengan menggabungkan perubahan hulu dengan milik Anda, yang berpotensi menimbulkan konflik.
Apa yang baru saja dilakukan Subversion, pada dasarnya adalah "pull --rebase". Tindakan merumuskan ulang perubahan lokal Anda menjadi relatif terhadap versi yang lebih baru adalah bagian "rebasing". Jika Anda telah melakukan "svn diff" sebelum upaya komit yang gagal, dan membandingkan diff yang dihasilkan dengan output dari "svn diff" sesudahnya, perbedaan antara kedua diff adalah apa yang dilakukan operasi rebasing.
Perbedaan utama antara Git dan Subversion dalam kasus ini adalah bahwa dalam Subversion, perubahan "Anda" hanya ada sebagai perubahan yang tidak dikomit dalam copy pekerjaan Anda, sementara di Git Anda memiliki komitmen aktual secara lokal. Dengan kata lain, di Git Anda telah memotong sejarah; sejarah Anda dan sejarah hulu telah menyimpang, tetapi Anda memiliki leluhur yang sama.
Menurut pendapat saya, dalam kasus normal memiliki cabang lokal Anda hanya mencerminkan cabang hulu dan melakukan pengembangan terus-menerus di atasnya, hal yang benar untuk dilakukan adalah selalu "--rase", karena itulah yang sebenarnya Anda lakukan secara semantik . Anda dan yang lainnya sedang meretas pada sejarah linier yang dimaksudkan dari sebuah cabang. Fakta bahwa orang lain kebetulan mendorong sedikit sebelum upaya yang Anda coba tidak relevan, dan tampaknya tidak produktif untuk setiap kecelakaan waktu seperti itu untuk menghasilkan penggabungan dalam sejarah.
Jika Anda benar-benar merasakan perlunya sesuatu untuk menjadi cabang untuk alasan apa pun, itu adalah keprihatinan yang berbeda menurut saya. Tetapi kecuali jika Anda memiliki keinginan spesifik dan aktif untuk mewakili perubahan Anda dalam bentuk penggabungan, perilaku default seharusnya, menurut pendapat saya, adalah "git pull --rebase".
Harap pertimbangkan orang lain yang perlu mengamati dan memahami sejarah proyek Anda. Apakah Anda ingin sejarah penuh dengan ratusan gabungan di semua tempat, atau Anda ingin hanya beberapa gabungan terpilih yang mewakili gabungan nyata dari upaya pengembangan yang berbeda secara disengaja?