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?
Perilaku default telah berubah sejak Git 2.9:
"git merge" digunakan untuk memungkinkan penggabungan dua cabang yang tidak umum dasar secara default, yang dipimpin untuk sebuah merek baru sejarah yang ada proyek yang dibuat dan kemudian bisa ditarik oleh yang tidak curiga pengelola, yang diperbolehkan yang tidak perlu paralel sejarah digabung ke proyek yang sudah ada. Perintah yang telah diajarkan untuk tidak membiarkan hal ini dengan default, dengan pintu keluar darurat
- memungkinkan-terkait-sejarah
pilihan yang akan digunakan dalam sebuah peristiwa langka yang menggabungkan sejarah dari dua proyek yang memulai kehidupan mereka secara mandiri.
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:
git pull origin branchname --allow-unrelated-histories
Aku punya kesalahan ini ketika saya mengatur repositori lokal pertama. Kemudian saya pergi ke GitHub dan menciptakan sebuah repositori baru. Kemudian aku berlari
git remote add origin <repository url>
Ketika saya mencoba untuk push/pull, aku sama fatal: unrelated_histories
kesalahan.
Berikut adalah bagaimana saya tetap itu:
git pull origin master --allow-unrelated-histories
git merge origin origin/master
... add and commit here...
git push origin master
Untuk ini, masukkan perintah:
git pull origin branchname --allow-unrelated-histories
Misalnya,
git pull origin master --allow-unrelated-histories
Referensi:
git pull origin <branch> --allow-unrelated-histories
Anda akan dialihkan ke Vim jendela edit:
git push --set-hulu asal <cabang>
Aku punya masalah yang sama. Coba ini:
git pull origin master --allow-unrelated-histories
git push origin master
PERINGATAN INI AKAN BERPOTENSI MENIMPA REMOTE REPOSITORI
Ini bekerja untuk saya:
git push origin master --force
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
:
$ git rebase origin/development
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
Kesalahan ini doesn't benar-benar membatalkan rebase, tapi sekarang kau berada di tengah-tengah itu:
$ git status
interactive rebase in progress; onto 4321beefdead
Last command done (1 command done):
pick 1234deadbeef1234deadbeef test merge commit
Jadi sekarang anda dapat melakukan penggabungan dengan tangan. Mengetahui orang tua berkomitmen asli gabungan melakukan:
$ git log -1 1234deadbeef1234deadbeef
commit 1234deadbeef1234deadbeef
Merge: 111111111 222222222
Author: Hans Dampf
Date: Wed Jun 6 18:04:35 2018 +0200
test merge commit
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:
$ git merge --allow-unrelated 222222222 --no-commit
Automatic merge went well; stopped before committing as requested
$ git commit -C 1234deadbeef1234deadbeef
[detached HEAD 909af09ec] test merge commit
Date: Wed Jun 6 18:04:35 2018 +0200
$ git rebase --continue
Successfully rebased and updated refs/heads/test-branch.
Aku punya masalah yang sama. Masalahnya adalah remote punya sesuatu untuk mencegah hal ini.
Saya pertama kali membuat repositori lokal. Saya menambahkan LISENSI
dan README.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
git push --set-upstream origin master
Saya punya:
error: failed to push some refs to 'https://github.com/lokeshub/myTODs.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes
(e.g. hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Sekarang untuk mengatasi hal ini saya lakukan
git pull origin master
Yang mengakibatkan kesalahan di bawah ini:
From https://github.com/lokeshub/myTODs
branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories**
Saya mencoba:
git pull origin master --allow-unrelated-histories
Hasilnya:
From https://github.com/lokeshub/myTODs
* branch master -> FETCH_HEAD
Auto-merging README.md
CONFLICT (add/add): Merge conflict in README.md
Automatic merge failed;
fix conflicts and then commit the result.
Solusi:
Aku menghapus repositori jauh dan menciptakan yang baru (saya pikir hanya menghapus file README
bisa bekerja) dan setelah itu bekerja di bawah:
git remote rm origin
git remote add origin https://github.com/lokeshub/myTODOs.git
git push --set-upstream origin master
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.
git pull origin master --allow-unrelated-histories
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:
git cherry-pick -m 1 1234deadbeef1234deadbeef
git rebase --continue
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 disebut asal
. 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.