Saya belajar git, dan saya mengikuti buku komunitas Git.
Sebelumnya (dahulu kala) saya membuat repositori publik di Github, dengan beberapa file. Sekarang saya mengatur repositori Git lokal di komputer saya saat ini, dan melakukan beberapa file. Lalu saya menambahkan remote menunjuk ke halaman Github saya:
[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C
Itu tampaknya berhasil:
[root@osboxes c]# git remote show learnc
* remote learnc
Fetch URL: https://github.com/michaelklachko/Learning-C
Push URL: https://github.com/michaelklachko/Learning-C
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (local out of date)
Sekarang saya ingin mengunduh file dari repo Github saya ke komputer saya. Saya melakukan ini:
[root@osboxes c]# git fetch learnc
[root@osboxes c]# git merge learnc/master
warning: refname 'learnc/master' is ambiguous.
Already up-to-date.
Namun, saya tidak melihat file baru di direktori lokal saya. Bagaimana saya bisa mendapatkannya?
Saya juga mencoba melakukan ini:
[root@osboxes c]# git pull learnc master
From https://github.com/michaelklachko/Learning-C
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
BTW, secara lokal saya di cabang utama (tidak ada cabang lain):
[root@osboxes c]# git status
On branch master
nothing to commit, working directory clean
git init
? Dalam kasus terakhir, repo-repo tersebut tidak terkait (tidak memiliki komitmen bersama) dan Anda tidak dapat menggabungkannya (tarikan diambil + digabung).Jawaban:
Mencoba
--allow-unrelated-histories
Seperti max630 berkomentar, atau seperti yang dijelaskan di sini, Git menolak untuk menggabungkan sejarah yang tidak terkait
sumber
Selesaikan konflik, lalu
sumber
Sementara saya semua untuk membebaskan masalah pekerjaan orang, saya tidak berpikir "push - force" atau "--allow_unrelated_histories" harus diajarkan kepada pengguna baru sebagai solusi umum karena mereka dapat menyebabkan kekacauan nyata pada repositori ketika seseorang menggunakannya tanpa mengerti mengapa semuanya tidak bekerja sejak awal.
Ketika Anda memiliki situasi seperti ini di mana Anda mulai dengan repositori lokal, dan ingin membuat jarak jauh di GitHub untuk berbagi pekerjaan Anda, ada sesuatu yang harus diwaspadai.
Ketika Anda membuat repositori online baru, ada opsi "Inisialisasi repositori ini dengan README". Jika Anda membaca cetakan kecil, tertulis "Lewati langkah ini jika Anda mengimpor repositori yang ada."
Anda mungkin telah mencentang kotak itu. Atau demikian pula, Anda membuat add / commit online sebelum Anda mencoba dorongan awal. Apa yang terjadi adalah Anda membuat riwayat komit unik di setiap tempat dan mereka tidak dapat direkonsiliasi tanpa tunjangan khusus yang disebutkan dalam jawaban Nevermore (karena git tidak ingin Anda beroperasi seperti itu). Anda dapat mengikuti beberapa saran yang disebutkan di sini, atau lebih sederhananya jangan centang opsi itu lain kali jika Anda ingin menautkan beberapa file lokal ke remote baru; menjaga remote bersih untuk dorongan awal itu.
Referensi: Pengalaman pertama saya dengan git + hub adalah mengalami masalah yang sama dan melakukan banyak pembelajaran untuk memahami apa yang terjadi dan mengapa.
sumber
Jika tidak ada riwayat yang substansial di satu sisi (alias jika itu hanya komit readme tunggal di ujung github), saya sering merasa lebih mudah untuk menyalin readme secara manual ke repo lokal saya dan melakukan
git push -f
untuk membuat versi saya komit root baru .Saya merasa ini sedikit kurang rumit, tidak perlu mengingat bendera yang tidak jelas, dan membuat sejarahnya sedikit lebih bersih.
sumber
Di cabang Anda - katakan master, tarik dan izinkan sejarah yang tidak terkait
Bekerja untukku.
sumber
Jalankan perintah berikut:
Gabungan vim akan terbuka. Tambahkan beberapa pesan penggabungan dan:
Dan Anda baik untuk pergi.
sumber
Ketika saya menggunakan
--allow-unrelated-histories
, perintah ini menghasilkan terlalu banyak konflik. Ada konflik dalam file yang bahkan tidak saya kerjakan. Untuk mengatasi kesalahan" Refusing to merge unrelated histories"
, saya menggunakan perintah rebase berikut:Setelah ini, komit perubahan yang tidak dikomit dengan pesan komit. Akhirnya, jalankan perintah berikut:
Setelah ini, copy pekerjaan saya mutakhir dengan salinan jarak jauh dan saya bisa mendorong perubahan saya seperti sebelumnya. Tidak ada lagi kesalahan riwayat yang tidak terkait saat menarik.
sumber
git pull --rebase=merge --allow-unrelated-histories
seperti--rebase=preserve
sudah usang git-scm.com/docs/git-pull#Documentation/…Dalam kasus saya menghadapi masalah yang sama, terutama permintaan tarikan pertama yang mencoba setelah menambahkan repositori Git dari jarak jauh. Kesalahan berikut sedang dihadapi.
Gunakan perintah --allow-unrelated-histories. Ini bekerja dengan sempurna.
sumber