Mencoba menarik file dari repositori Github saya: “menolak untuk menggabungkan sejarah yang tidak terkait”

151

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
MichaelSB
sumber
4
Ketika Anda mengatur repo lokal Anda, apakah Anda mengkloning repo Github Anda atau baru saja melakukannya git init? Dalam kasus terakhir, repo-repo tersebut tidak terkait (tidak memiliki komitmen bersama) dan Anda tidak dapat menggabungkannya (tarikan diambil + digabung).
Paul
Saya melakukan git init. Jadi haruskah saya mengkloning repo Github saya untuk memperbaikinya?
MichaelSB
1
Anda dapat mengkloning repo Github Anda dan melanjutkan bekerja dengannya, tetapi repo itu masih terpisah. Apakah Anda ingin menggabungkan dua sejarah yang tidak terkait bersama?
Paul
Saya kira saya ingin menggabungkan sejarah, tetapi sebenarnya saya hanya ingin menggabungkan file secara lokal dan pada github. Maksud saya, saya tidak terlalu peduli dengan riwayat file lama yang saya miliki di Github.
MichaelSB

Jawaban:

315

Mencoba --allow-unrelated-histories

Seperti max630 berkomentar, atau seperti yang dijelaskan di sini, Git menolak untuk menggabungkan sejarah yang tidak terkait

Tidak lagi
sumber
1
seperti yang tercantum pada catatan rilis github
systemaddict
Mengapa tidak ada opsi konfigurasi untuk mengatur ini? Setiap kali saya harus memburu opsi ini; Saya bekerja dengan git sejak 2k8 dan saya benar-benar terganggu oleh pengasuhan bayi ini. Opsi bodoh tidak selalu ada. Setidaknya pesan penolakan harus menyertakan penggantian untuk digunakan.
nyov
98
git checkout master
git merge origin/master --allow-unrelated-histories

Selesaikan konflik, lalu

git add -A .
git commit -m "Upload"
git push
Apakah Nhu Vy
sumber
1
Terima kasih telah menguraikan solusi di atas.
Rahul Raj
39

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.

BigJMoney
sumber
12

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.

captncraig
sumber
11

Di cabang Anda - katakan master, tarik dan izinkan sejarah yang tidak terkait

git pull origin master --allow-unrelated-histories

Bekerja untukku.

Edgar256
sumber
1
Perintah ini adalah perintah yang Anda harus setujui untuk menambahkan Lisensi atau ReadMe saat membuat repo asal di Github.
F1Linux
4

Jalankan perintah berikut:

git pull origin master --allow-unrelated-histories

Gabungan vim akan terbuka. Tambahkan beberapa pesan penggabungan dan:

  1. Tekan ESC
  2. Tekan Shift + ';'
  3. Tekan 'w' dan kemudian tekan 'q'.

Dan Anda baik untuk pergi.

KayV
sumber
3

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:

git pull --rebase=preserve --allow-unrelated-histories

Setelah ini, komit perubahan yang tidak dikomit dengan pesan komit. Akhirnya, jalankan perintah berikut:

git rebase --continue

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.

Tasnim Fabiha
sumber
1
Versi aktual: git pull --rebase=merge --allow-unrelated-historiesseperti --rebase=preservesudah usang git-scm.com/docs/git-pull#Documentation/…
Luckylooke
0

Dalam kasus saya menghadapi masalah yang sama, terutama permintaan tarikan pertama yang mencoba setelah menambahkan repositori Git dari jarak jauh. Kesalahan berikut sedang dihadapi.

fatal: refusing to merge unrelated histories on every try

Gunakan perintah --allow-unrelated-histories. Ini bekerja dengan sempurna.

git pull origin branchname --allow-unrelated-histories
Jitendra Rathor
sumber