Git menolak untuk menggabungkan terkait sejarah di rebase
Selama git rebase asal/pengembangan
pesan galat berikut ini ditunjukkan dari Git:
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
Saya Git versi 2.9.0. Itu digunakan untuk bekerja dengan baik di versi sebelumnya.
Bagaimana saya bisa melanjutkan ini rebase memungkinkan terkait sejarah dengan paksa bendera diperkenalkan dalam rilis baru?
1858
14
Perilaku default telah berubah sejak Git 2.9:
Lihat Git merilis changelog untuk informasi lebih lanjut.
Anda dapat menggunakan
--izinkan-terkait-sejarah
untuk memaksa penggabungan terjadi.Dalam kasus saya, kesalahan itu hanya
fatal: menolak untuk menggabungkan terkait sejarah
di setiap mencoba, terutama yang pertama permintaan tarik setelah jarak jauh menambahkan repositori Git.Menggunakan
--izinkan-terkait-sejarah
bendera bekerja dengan permintaan tarik dengan cara ini:Coba perintah berikut:
Ini harus memecahkan masalah anda.
Aku punya kesalahan ini ketika saya mengatur repositori lokal pertama. Kemudian saya pergi ke GitHub dan menciptakan sebuah repositori baru. Kemudian aku berlari
Ketika saya mencoba untuk push/pull, aku sama
fatal: unrelated_histories
kesalahan.Berikut adalah bagaimana saya tetap itu:
Untuk ini, masukkan perintah:
Misalnya,
Referensi:
GitHub terkait sejarah masalah
Anda akan dialihkan ke Vim jendela edit:
git push --set-hulu asal <cabang>
Aku punya masalah yang sama. Coba ini:
Mencoba
git pull --rebase pembangunan
PERINGATAN INI AKAN BERPOTENSI MENIMPA REMOTE REPOSITORI
Ini bekerja untuk saya:
Karena semua jawaban yang lain tidak benar-benar menjawab pertanyaan, di sini adalah solusi yang terinspirasi oleh jawaban pada sebuah pertanyaan yang terkait.
Agar anda mendapatkan kesalahan anda melakukan
git rebase
:Kesalahan ini doesn't benar-benar membatalkan rebase, tapi sekarang kau berada di tengah-tengah itu:
Jadi sekarang anda dapat melakukan penggabungan dengan tangan. Mengetahui orang tua berkomitmen asli gabungan melakukan:
Mengetahui yang mana dari dua gabungan orang tua adalah salah satu yang digabung menjadi satu saat (mungkin yang kedua, pastikan dengan
git log 222222222
), dan kemudian melakukan penggabungan dengan tangan, menyalin pesan komit asli gabungan melakukan:Aku punya masalah yang sama. Masalahnya adalah remote punya sesuatu untuk mencegah hal ini.
Saya pertama kali membuat repositori lokal. Saya menambahkan
LISENSI
danREADME.md
file ke lokal saya dan berkomitmen.Kemudian saya ingin repositori jauh jadi saya membuat satu di GitHub. Di sini saya membuat kesalahan dengan memeriksa "Menginisialisasi repositori ini dengan README", yang dibuat README.md di remote juga.
Jadi sekarang ketika aku berlari
Saya punya:
Sekarang untuk mengatasi hal ini saya lakukan
Yang mengakibatkan kesalahan di bawah ini:
Saya mencoba:
Hasilnya:
Solusi:
Aku menghapus repositori jauh dan menciptakan yang baru (saya pikir hanya menghapus file
README
bisa bekerja) dan setelah itu bekerja di bawah:Hal ini biasanya terjadi ketika anda melakukan pertama kali ke remote repository. Sebagai kesalahan jelas mengatakan "menolak untuk menggabungkan terkait sejarah", kita perlu menggunakan --izinkan-terkait-sejarah bendera.
Sekarang akan ada beberapa konflik yang harus kita selesaikan secara manual. Setelah itu baru melakukan kode dan mendorongnya.
Aku berjuang dengan ini juga, tapi aku berhasil menemukan solusi.
Ketika anda mengalami error di atas, hanya cherry-pick gabungan melakukan dan kemudian melanjutkan rebase:
Saya menggunakan rebase selama bertahun-tahun dan saya belum pernah mengalami masalah seperti itu. Namun, masalah pertama anda adalah, bahwa anda mencoba untuk melakukannya secara langsung pada remote branch
pembangunan
dari repositori remote, yang disebutasal
. Yang benar-benar salah, karena rebase berbahaya perintah, yang restructeres git sejarah. Setelah mengatakan bahwa, anda harus terlebih dahulu mencoba pada repositori lokal dan mendorong itu saja, jika bekerja untuk anda seperti yang diharapkan.Jadi, saya biasa rebase alur kerja tampak seperti berikut ini (tapi perlu diingat, bahwa anda tidak harus menggunakan rebase di cabang-cabang, yang anda tidak satu-satunya juri. Untuk cabang tersebut, gunakan hanya bergabung dan menyelesaikan konflik, jika berlaku):
master
; sebagai satu-kapal komando):git checkout master && git pull asal master && git checkout pembangunan
git rebase master
git push-f asal pengembangan
Seperti yang saya sudah sebutkan, perlu diingat, bahwa rebase memanipulasi git sejarah, yang biasanya hal yang buruk. Namun, hal's mungkin untuk melakukan itu di cabang-cabang, di mana tidak ada orang lain untuk melakukan. Dalam rangka untuk menjaga branch menarik-mampu untuk pengembang lain, penggunaan yang lain menggabungkan strategi seperti penggabungan itu sendiri, squash atau clifford software. Jadi, dengan kata lain: Rebase harus'nt menjadi alat pengembangan yang telah didistribusikan. Itu bekerja dengan baik untuk anda, jika anda adalah satu-satunya yang bekerja pada repositori ini.
Kami menggunakan fitur cabang strategey. Dalam hal ini, saya biasanya menggunakan rebase dalam rangka untuk mendapatkan "update" dari pengembang lain, yang terjadi sementara itu di cabang utama. Demikian, hal ini mengurangi ukuran dari melakukan yang terlihat di tarik permintaan. Oleh karena itu, itu membuat lebih mudah untuk kode resensi untuk melihat perubahan yang dibuat dalam fitur ini cabang.