Saya menggunakan rebase selama bertahun-tahun dan saya tidak pernah mengalami masalah seperti itu. Namun, masalah pertama Anda adalah, bahwa Anda mencoba melakukannya secara langsung pada cabang jarak jauh development
dari repositori jarak jauh, yang disebut origin
. Itu benar-benar salah karena rebase adalah perintah berbahaya, yang merestrukturisasi sejarah git. Karena itu, Anda harus terlebih dahulu mencoba repositori lokal Anda dan hanya mendorongnya, jika itu bekerja untuk Anda seperti yang diharapkan.
Jadi, alur kerja rebase saya yang biasa terlihat seperti berikut (tetapi harap diingat, bahwa Anda tidak boleh menggunakan rebase di cabang, yang bukan hanya Anda satu-satunya komite. Untuk cabang seperti itu, gunakan hanya menggabungkan dan menyelesaikan konflik, jika berlaku):
- pastikan Anda memiliki pohon kerja yang bersih (tidak ada perubahan yang tidak dikomit)
- checkout ke cabang tempat Anda ingin rebase (misalnya, katakan saja
master
; sebagai perintah satu baris):git checkout master && git pull origin master && git checkout development
- Lakukan rebase yang sebenarnya:
git rebase master
- Jika sudah selesai dan semuanya berfungsi seperti yang diharapkan, dorong ke remote Anda. Untuk melakukannya, Anda harus memaksanya, karena host jarak jauh sudah memiliki sejarah dalam urutan lain, remote akan menjawab tanpa ada yang mendorong. Jadi, kita perlu mengatakan "versi lokal saya dari sejarah sudah benar, menimpa semua yang ada di cabang jauh menggunakan versi lokal saya dari sejarah":
git push -f origin development
Seperti yang sudah saya sebutkan, perlu diingat, rebase memanipulasi sejarah git, itu biasanya hal yang buruk. Namun, dimungkinkan untuk melakukan itu di cabang, di mana tidak ada orang lain yang berkomitmen. Untuk menjaga agar cabang tetap dapat dikembangkan oleh pengembang lain, gunakan strategi penggabungan lainnya seperti penggabungan itu sendiri, squash, atau cherrypick. Jadi, dengan kata lain: Rebase seharusnya tidak menjadi alat Anda dalam pengembangan terdistribusi. Ini berfungsi dengan baik untuk Anda jika Anda adalah satu-satunya yang bekerja di repositori ini.
Kami menggunakan strategi cabang fitur. Dalam hal ini, saya biasanya menggunakan rebase untuk mendapatkan "pembaruan" dari pengembang lain, yang terjadi sementara itu di cabang utama. Melakukannya, itu mengurangi ukuran komit yang terlihat dalam permintaan tarik. Oleh karena itu, lebih mudah bagi peninjau kode untuk melihat perubahan yang saya buat di cabang fitur ini.
git-rebase
situasi sementara jawabannya memberi bendera untukgit-merge