uyarı: uzak HEAD, mevcut olmayan ref anlamına gelir, ödeme yapılamaz


87

Bu, farklı nedenlerden dolayı popüler bir hata gibi görünüyor.

"Kiflea.git" adında basit bir çıplak git depom var, bunu şu şekilde klonladım:

git clone git://kipdola.be/kiflea.git

Sonra git bana şunu söylüyor: warning: remote HEAD refers to nonexistent ref, unable to checkout.

Ve evet, haritada .git dizini dışında sürümü belirlenmiş dosya yok. Her neyse, yapmam gereken tek şey:

cd kiflea
git checkout master

Ve işe yarıyor, tüm dosyalar orada. Ama bir repo klonlamanın otomatik olarak ustayı kontrol ettiğini düşündüm, peki tam olarak ne oluyor ve bunu nasıl düzeltebilirim?

Biraz yaptıktan sonra bunun git checkout masteryerel .git yapılandırma dosyama eklendiğini fark ettim :

[branch "master"]
    remote = origin
    merge = refs/heads/master

Bu git deposunun uzak geçmişte bir svn deposu olduğunu bilmek muhtemelen ilginçtir.

Not: gitweb kullanarak çıplak depoda gezinirken, orada açıkça bir masterşube var: http://kipdola.be/gitweb/?p=kiflea.git;a=summary


2
Sana ne git ls-remote origingösteriyor
CB Bailey

checkout master25f600739343a7ce32d6311a1e6140870774810b refs/heads/master
Bitten

1
Görünüşe göre uzak depo HEAD,. Ona doğrudan erişiminiz var mı? Öyleyse, buraya
CB Bailey

1
Bir depoyu klonlarsanız ve şubeyi belirtmezseniz, uzak kafayı kullanmaya çalışır. Aşağıda cevaplarda açıklandığı gibi, hangi şubeye doğrudan etki edemezsiniz. Ancak, klon zamanında farklı bir şubeyi kontrol ederek bu kontrolden kaçınırsınız. Sizin durumunuzda, ana var gibi görünüyor, ancak uzak kafa başka bir yeri gösteriyor, bu yüzden şunu kullanın:git clone -b master <url> <dir>
2014

Yanıtlar:


128

Bu warning: remote HEAD refers to nonexistent ref, unable to checkout., uzak (çıplak) deponun çağrılan dosyada HEADaynı depodaki herhangi bir yayınlanmış şubeyle eşleşmeyen dal referansı içerdiği anlamına gelir .

Uyarının yalnızca git'in ödeme yapmadığı anlamına geldiğini unutmayın. Klonlanmış depo aksi halde gayet iyi. git branch -aOlası dalları görmek ve git checkout the-branch-you-wantsorunu çözmek için yapmanız yeterli .

Bu genellikle, o dosyanın varsayılan içeriğinin ( .git/HEADveya HEADçıplak depolar için düz ) ref: refs/heads/masterbirinin clonebu depoya gidecekse , varsayılan olarak dalı klonlaması gerektiğini söylemesi nedeniyle olur refs/heads/master. Varsayılan olarak Git, refs/heads/önek olmadan (yani mastervarsayılan olarak) yerel şube oluşturacaktır . Daha git help symbolic-reffazla bilgi için deneyin .

Bu durumla ilgili sorun, Git'in uzak sembolik referansları değiştirmek için bir yöntem sağlamamasıdır, bu nedenle ya Git barındırma sağlayıcısının uyguladığı bir şeyi kullanırsınız (örn. Ayarlar - Yönetici haklarınız varsa GitHub'da varsayılan dal) veya şube adını kullanmanız gerekir mastervarsayılan dal olarak (çünkü bu sembolik başvuru için varsayılan değerdir).

Uzak git deponuza kabuk erişiminiz varsa, varsayılan olarak kullanmak istediğiniz dal adının cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZnerede XYZolduğunu basitçe yapabilirsiniz .

Bu sorunu çözmenin bir yolu, hiçbir işlem yapmadan yeni bir uzak çıplak depo oluşturmaktır ve git push name-of-the-remote my-special-branch-namebu, tek bir dal içeren çıplak depoya neden olur, my-special-branch-nameancak HEADsembolik başvuru hala işaret eden varsayılan değeri içerir master. Sonuç olarak, yukarıda belirtilen uyarıyı alırsınız.


20
Uyarının yalnızca git'in yapmadığı anlamına geldiğini unutmayın checkout. Klonlanmış depo aksi halde gayet iyi. Do git branch -aolası şube ve görmek için git checkout the-branch-you-want"düzeltme" meselesine.
Mikko Rantalainen

2
En az biri, kullanırken git clone -b master(veya mevcut dalın adı ne olursa olsun) uzak kafayı kullanmaktan kaçınabilir .
2014 00:59

Ben son paragrafta yazdığınızı aynen yaptım; Dalda çıplak depoda (gitlab içinde) dosyalar var ancak klon boş görünüyor. {git şube -a} hiçbir şey göstermiyor. {git clone -b my-special-branch-name <url>} de çalışmıyor (uzak uç kapatıldı).
Ed Randall

Refs / head'e refs / remotes / my-special-branch-name kopyalayarak ve HEAD'i eşleşecek şekilde düzenleyerek (çıplak gitlab deposunda) "düzelttim". Daha sonra -b my-special-branch-name kullanarak başarıyla klonlayabilirim. Ancak "init" / "push" döngüsünden sonra boş depoyu yapılandırmanın doğru yolu nedir, böylece klon -b sorunla karşılaşmaz lütfen?
Ed Randall

1
@EdRandall cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZnerede XYZolursa İstediğiniz varsayılan şube adı kullanılacak olan git cloneolmadan yapılır -bbayrak. Başka bir sorununuz varsa, lütfen soruları yorum olarak eklemek yerine yeni bir soru sorun.
Mikko Rantalainen

10

Aynı sorunu yaşadım çünkü artık masterdalı kullanmıyordum ve hem yerel hem de uzak depomda kayboldu.

Uzak depo hala HEADayarlandı master, onu gerçekten kullandığım uzak dallardan birine değiştirdim ve her şey yolunda gidiyor.

Uzak deponuza erişebiliyorsanız:

  • Şuna gidin remote_repo.git;
  • HEADDosyayı düzenle
  • Değişim ref: refs/heads/masteriçinref: refs/heads/your_branch

her iki koşul da mümkündür, ana birim kaldırılmıştır ve HEAD hala onu işaret etmektedir veya HEAD, daha sonra kaldırılan bir dala değiştirilmiştir. Sanırım (usta çalıştığından beri) ikinci seçenek bizim durumumuz. @MarcoBonifazi In case "değişim" yerine olacağını broken_branchbirlikte refs/heads/master.
2014 1

2
Dosyaları düzenlemeye başvurmadan HEAD dalını bu şekilde ayarlamanın "uygun" bir yolu var mı?
Ed Randall

@EdRandall , başka bir yorumda söylediğim gibi bayraksız yapılırsa kullanmak istediğiniz varsayılan şube adı cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZnerede . XYZgit clone-b
Mikko Rantalainen

7

Evet, bu, ana şubeden farklı bir şubeyi kontrol etmeye çalışan git klonunuzla ilgilidir. Sadece bunu yap

git clone user@git-server:project_name.git -b branch_name /some/folder

Bu, şube adıyla tam şubeyi klonlamanıza yardımcı olacaktır.


2

Bu hata görüntülenmesine rağmen - projem hala ilgili depoya bağlıydı - git branchkomutu çalıştırdım ve uygun dalları gördüm - sonra koştum git checkout *branchnameve BOOM - her şey yolunda gitti .


Evet, @Mikko sebebinin ne olduğunu açıkladı. Ödemeyi atlamak istiyorsanız, -b seçeneğini kullanabilirsiniz. (Ama uzaktaki
deponuzu

1

Uzak deponuzda kesinlikle bir sorun var. Deponun yeni bir klonunu oluşturarak bunu düzeltebilirsiniz. Ayrıca ana dala yeni bir kaydetme göndermek de işe yarayabilir.


Sanırım şunu demek
istediniz

1

Tahmin ediyorum ki *, uzak sunucuyu bir şekilde kandıran, kesinleştirme günlüğünün başında geliyor.

Bazı menü bağlantılarını kullanarak deponun web arayüzüne göz atabilirim, ancak diğerleri 404 - Unknown commit object, özellikle özet sayfasından bir veya benzeriyle başarısız oluyor .

Bu son commit mesajını değiştirip değiştiremeyeceğinizi görün ve ardından düzeltip düzeltmediğini görmek için güncellemeyi zorlayın. Sunucu iblisinde bir hata olabilir. Eğer düzelirse git@vger.kernel.org git listesinde rapor etmeye değer olacaktır (sadece düz metin mesajları)


1

Çıplak depo oluştururken de aynı sorunu yaşadım.

Sadece depoyu klonlayarak, yerel bir ana şube oluşturarak ve ardından ana depoyu uzak depoya göndererek çözdüm.

1) depoyu klonlayın

$ git.exe clone --progress -v "the remote path" "my local path"

2) yerel olarak bir ana dal oluşturun.

   $ git checkout -b master

3) yerel şubede bir şey yapın

$ git add readme.md 
$ git commit –m “Added readme”

4) Uzaktan kumandadaki yerel master'ı itin

   $ git push origin master

0

Gerçekte mevcut ana dal yoksa, aşağıdakileri kontrol edin; '.Git' klasörünün içinde 'paketlenmiş referanslar' adlı bir dosya varsa, onu açın ve listelenen tüm referansları bulabilirsiniz.

Aşağıdaki gibi bir şey;

# pack-refs with: peeled fully-peeled 
e7cc58650190bd28599d81917f1706445d3c6d8b refs/tags/afw-test-harness-1.5
^cfae4f034e82591afdf4e5ed72279297d0eee618
6afe1bcfa4bd74de8e0c8f64d024e1cc289206df refs/tags/afw-test-harness-2.1
^c32f7fa495d4b44652f46c065fcd19c3acd237a6
72f2e4284dfbf27c82967da096c6664646bbdd19 refs/tags/android-1.6_r1
^50992e805e758e2231f28ec2127b57a1a9fd0ddc
0cbd528cad1cee9556098b62add993fc3b5dcc33 refs/tags/android-1.6_r1.1

Sonra kullan;

git checkout refs/tags/xxxx

Veya

git checkout 'HASH value'

gerekli sürümü kontrol etmek için. Teşekkür ederim.


0

Bunu şu şekilde düzelttim:

git checkout -b  master
git push

Bu, varsayılan ana bilgisayarı yarattı ve sonra diğer şubelerimi de kontrol edebilirdim


0

Benim durumumda depo boştu.

git checkout --orphan master

git add some_file
git commit -m 'init'
git push origin master 

0

Gitlab için, varsayılan bir dalda olduğunuzu gösterse bile (örneğin master), aslında üzerinde olmayabilirsiniz, yeniden ayarlayarak, şu şekilde:

  1. Belki yeni bir şube yarat asd
  2. ayarlar> depo> Varsayılan Dal, varsayılan dalın olduğunu gösterir. master
  3. Olarak ayarlayın asd
  4. Geri ayarla master
  5. asdŞubeyi sil

Bitti, şimdi varsayılan şubeniz master

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.