Github veri havuzumdaki dosyaları almaya çalışıyorum: “ilgisiz geçmişleri birleştirmeyi reddetmek”


151

Git'i öğreniyorum ve Git topluluk kitabını takip ediyorum.

Daha önce (uzun zaman önce) Github'da bazı dosyalarla halka açık bir depo yaptım. Şimdi mevcut bilgisayarımda yerel bir Git deposu kurdum ve bazı dosyalar işledim. Sonra Github sayfama bir işaret ekledim:

[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C

Bu başarılı görünüyordu:

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

Şimdi dosyaları Github deposumdan bilgisayarıma indirmek istiyorum. Bunu ben yaptım:

[root@osboxes c]# git fetch learnc
[root@osboxes c]# git merge learnc/master
warning: refname 'learnc/master' is ambiguous.
Already up-to-date.

Ancak, yerel dizinimde yeni dosya göremiyorum. Onları nasıl alabilirim?

Ayrıca bunu yapmaya çalıştım:

[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, yerel olarak ana daldayım (başka dal yok):

[root@osboxes c]# git status
On branch master
nothing to commit, working directory clean

4
Yerel repoyu kurduğunuzda, Github repo'nuzu klonladınız git initmı yoksa yeni mi yaptınız ? İkinci durumda, bu depolar ilişkisizdir (ortak taahhütleri yoktur) ve bunları birleştiremezsiniz (çekme getirme + birleştirme).
Paul

Git init yaptım. Bunu düzeltmek için Github repo'mu klonlamalıyım?
MichaelSB

1
Github repo'nuzu klonlayabilir ve onunla çalışmaya devam edebilirsiniz, ancak yine de ayrı bir repo olacaktır. İlişkisiz iki tarihi bir araya getirmek ister misiniz?
Paul

Sanırım geçmişleri birleştirmek istiyorum, ama gerçekten sadece dosyaları hem yerel hem de github'da birleştirmek istiyorum. Demek istediğim, Github'daki eski dosyaların tarihini gerçekten umursamıyorum.
MichaelSB

Yanıtlar:


315

Deneyin --allow-unrelated-histories

Max630 yorum yaptı gibi veya burada açıklandığı gibi Git ilgisiz geçmişleri birleştirmeyi reddediyor



Bunu ayarlamak için neden yapılandırma seçeneği yok? Bu seçeneği her aramam gerektiğinde; Git ile 2k8'den beri çalışıyorum ve bu bebek bakıcılığından tamamen rahatsızım. Aptalca seçenek her zaman orada değildi. En azından ret mesajı, kullanılacak geçersiz kılmayı içermelidir.
nyov

98
git checkout master
git merge origin/master --allow-unrelated-histories

Çatışmayı çözün, sonra

git add -A .
git commit -m "Upload"
git push

1
Yukarıdaki çözümü detaylandırdığınız için teşekkür ederiz.
Rahul Raj

39

Ben insanların çalışma sorunlarını engellemekten vazgeçmeme rağmen, "push --force" veya "--allow_unrelated_histories" in yeni kullanıcılara genel çözümler olarak öğretilmesi gerektiğini düşünmekteyim. şeylerin neden işe yaramadığını anlamadan.

Yerel bir havuzla başladığınız ve GitHub'da çalışmanızı paylaşmak için uzaktan kumanda yapmak istediğiniz bir durum olduğunda, dikkat etmeniz gereken bir şey vardır.

Yeni çevrimiçi havuzu oluşturduğunuzda, "Bu havuzu README ile başlat" seçeneği vardır. Küçük yazıları okursanız, "Mevcut bir havuzu içe aktarıyorsanız bu adımı atla" yazıyor.

Bu kutuyu işaretlemiş olabilirsiniz. Ya da benzer şekilde, ilk pushu denemeden önce çevrimiçi bir ekleme / taahhütte bulundunuz. Ne olur, her yerde benzersiz bir taahhüt geçmişi oluşturursunuz ve Nevermore'un cevabında belirtilen özel izin olmadan uzlaştırılamazlar (çünkü git, bu şekilde çalışmanızı istemiyor). Burada bahsi geçen tavsiyelerin bazılarını takip edebilir ya da daha sonra sadece yerel dosyaları yeni bir uzaktan kumandaya bağlamak istediğinizde bu seçeneği işaretlemeyin; uzaktan kumandayı ilk basış için temiz tutar.

Referans: git + hub ile ilk deneyimim, aynı problemle karşılaşmak ve neler olduğunu ve neden olduğunu anlamak için çok fazla öğrenme yapmaktı.


12

Bir uçta önemli bir geçmiş yoksa (aka, github ucunda sadece tek bir benioku taahhüdü ise), benioku dosyasını yerel repoma manuel olarak kopyalamayı ve git push -fversiyonumu yeni kök taahhüdü yapmak için genellikle daha kolay buluyorum .

Biraz daha az karmaşık olduğunu, belirsiz bir bayrağı hatırlamayı gerektirmediğini ve tarihi biraz daha temiz tuttuğunu düşünüyorum.


11

Şubenizde - usta deyin, ilgisiz geçmişleri çekin ve izin verin

git pull origin master --allow-unrelated-histories

Benim için çalıştı.


1
Bu komut, Github'da bir kaynak deposu oluştururken Lisans veya BeniOku eklemeyi kabul etmeniz gereken komuttur.
F1Linux

4

Aşağıdaki komutu yürütün:

git pull origin master --allow-unrelated-histories

Birleştirme vimi açılacaktır. Birleştirme mesajı ekleyin ve:

  1. ESC tuşuna basın
  2. Üst Karakter + ';' tuşlarına basın
  3. 'W' ve ardından 'q' tuşuna basın.

Ve gitmekte fayda var.


3

Kullandığımda --allow-unrelated-histories, bu komut çok fazla çakışma yarattı. Dosyalarda üzerinde çalışmadım bile çatışmalar vardı. Hatayı " Refusing to merge unrelated histories"aşmak için aşağıdaki rebase komutunu kullandım:

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

Bu işlemden sonra taahhüt edilmemiş değişiklikler bir taahhüt mesajı ile birlikte gönderilir. Son olarak, aşağıdaki komutu çalıştırın:

git rebase --continue

Bundan sonra, çalışma kopyam uzak kopyayla günceldi ve değişiklikleri önceki gibi itebildim. Artık ilgisiz geçmiş hatası çekilirken hata oluşmaz.


1
Gerçek sürümü: git pull --rebase=merge --allow-unrelated-historiesolarak --rebase=preservekullanım dışı kalmıştır git-scm.com/docs/git-pull#Documentation/...
Luckylooke

0

Benim durumumda da aynı sorunla karşı karşıya kaldım, özellikle de bir Git deposu uzaktan eklendikten sonra ilk çekme isteği. Aşağıdaki hatayla karşılaşıldı.

fatal: refusing to merge unrelated histories on every try

--Allow-unlatelated-histories komutunu kullanın. Mükemmel çalışıyor.

git pull origin branchname --allow-unrelated-histories
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.