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?

Mengomentari pertanyaan (7)

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.

Komentar (6)

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
Komentar (10)

Coba perintah berikut:

git pull origin master --allow-unrelated-histories

Ini harus memecahkan masalah anda.

Komentar (0)

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 

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
Komentar (5)

Untuk ini, masukkan perintah:

git pull origin branchname --allow-unrelated-histories

Misalnya,

git pull origin master --allow-unrelated-histories

Referensi:

GitHub terkait sejarah masalah

Komentar (1)
git pull origin  --allow-unrelated-histories

Anda akan dialihkan ke Vim jendela edit:

  • Menyisipkan pesan commit
  • Kemudian tekan Spasi (untuk keluar "Insert" mode), kemudian : (usus besar), maka x (kecil "x") dan akhirnya memukul Enter untuk keluar dari Vim
  • git push --set-hulu asal <cabang>
Komentar (2)

Aku punya masalah yang sama. Coba ini:

git pull origin master --allow-unrelated-histories 

git push origin master
Komentar (0)

Mencoba git pull --rebase pembangunan

Komentar (3)

PERINGATAN INI AKAN BERPOTENSI MENIMPA REMOTE REPOSITORI

Ini bekerja untuk saya:

git push origin master --force
Komentar (8)

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.
Komentar (0)

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
Komentar (4)

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.

Komentar (1)

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
Komentar (1)

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):

  1. pastikan anda memiliki kerja yang bersih pohon (tidak uncommit perubahan)
  2. checkout untuk cabang yang ingin anda rebase ke (misalnya, let's mengatakan's master; sebagai satu-kapal komando): git checkout master && git pull asal master && git checkout pembangunan
  3. Melakukan acutal rebase: git rebase master
  4. Jika itu's dilakukan dan semuanya bekerja seperti yang diharapkan, push ke remote anda. Untuk melakukannya, anda perlu untuk memaksa, karena remote host sudah memiliki sejarah dalam perintah lain, remote akan menjawab dengan apa-apa untuk mendorong. Jadi, kita perlu untuk mengatakan "saya versi lokal dari sejarah yang benar, segala sesuatu yang menimpa pada remote branch menggunakan versi lokal dari sejarah": 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.

Komentar (1)