Yapılandırmanız uzaktan kumandadan <şube adı> ile birleştirileceğini belirtiyor, ancak böyle bir ref getirilmedi.


203

Çekme için bu hatayı alıyorum:

Yapılandırmanız uzaktan 'refs / heads / feature / Sprint4 / ABC-123-Branch' ile birleştirmeyi belirtiyor, ancak böyle bir ref getirilmedi.

Bu hata başka bir dal için gelmiyor.
Bu dalla ilgili özel şey, başka bir dalın önceki taahhüdünden yaratılmış olmasıdır.

Yapılandırma dosyam şöyle görünüyor:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = <url here>
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "new-develop"]
    remote = origin
    merge = refs/heads/new-develop
[branch "feature/Sprint4/ABC-123-Branch"]
    remote = origin
    merge = refs/heads/feature/Sprint4/ABC-123-Branch

Birleştirme işlemi için kullandığınız komutu paylaşabilir misiniz?
dchayka

1
Bu sorun, uzak dal silindiğinde ortaya çıkabilir. Gerçekten orada olup olmadığını iki kez kontrol edin.
Benny Neugebauer

4
Gelecekteki okuyucular: Uzak dalın var olduğunu biliyorsanız, durumu görmezden gelip gelmediğinizi kontrol edin. Uzak bir dalı izlemek için yerel bir şube ayarlamıştım, ancak uzaktan kumandanın adını tüm küçük harflerle yazdım. Menşei / şube adı yerine orijin / BranchName'i izlemek için yerel olarak yeniden yapılandırılması gerekiyordu
Jerreck

Bu hatayı aldım ve sorun aşağıdaki cevaplardan çok daha basitti, VPN bağlantımı kaybettim. Bu da git uzaktaki sunucuya erişemezse aldığınız hatadır.
Ben Thurley

Git sunucum çıktı. Nedeni bu.
dellasavia

Yanıtlar:


150

Bunun anlamı

Yukarı originakışınız — aradığınız uzaktan kumandanın — artık yok veya belki de hiç yoktu (sadece bu bilgilerden söylemek imkansız)feature/Sprint4/ABC-123-Branch . Bunun özel bir nedeni var: birisi (muhtemelen siz değil ya da hatırlarsınız) diğer Git deposundaki dalı sildi.

Ne yapalım

Bu ne istediğinize bağlıdır . Aşağıdaki tartışma bölümüne bakın. Yapabilirsin:

  • uzaktan kumandada şube oluşturma veya yeniden oluşturma veya
  • yerel şubenizi silin veya
  • aklınıza gelebilecek başka herhangi bir şey.

Tartışma

Çalışıyor olmalısınız git pull(eğer çalışıyorsanız git mergefarklı bir hata mesajı alırsınız veya hiç hata mesajı almazsınız).

Çalıştırdığınızda git fetchGit, yapılandırmanızın bölümünün urlaltındaki satıra göre başka bir Git ile iletişim kurar [remote "origin"]. Git bir komut (ishal Yani upload-pack, başka şeylerin yanı sıra, gönderir) sizin Git tüm branşlarda bir listesini. Bunun git ls-remotenasıl çalıştığını görmek için kullanabilirsiniz (deneyin, eğiticidir). İşte bu bir Git deposunda gitkendisi için çalışırken ne olsun bir snippet'i :

$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f    HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b    refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f    refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1    refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6    refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638    refs/heads/todo
[snip]

refs/heads/Girişler uzaktan kumandadaki mevcut dalların tümünü listelemek, 1 tekabül birlikte (ilişkin kimlikleri taahhüt refs/tags/girdileri kimlikleri kaydedilmesini yerine nesneleri etiketine işaret edebilir).

Kişisel Git bu dal adlarının her biri alır ve değiştirir göre bunu fetchaynı hat (lar) remotebölümünde. Bu durumda Git'iniz refs/heads/master,refs/remotes/origin/master örneğin . Git bunu karşılaşan her şube adıyla yapar.

Ayrıca özel dosyadaki orijinal adları da kaydeder FETCH_HEAD(kendi .gitdizininize göz atarsanız bu dosyayı görebilirsiniz ). Bu dosya, getirilen adları ve kimlikleri kaydeder.

git pullO çalıştırır: komutu bir kolaylık kestirme yol olarak kastedilmektedir git fetchsonra uzaktan uygun üzerinde ve git merge(böylece, talimat eğer ya git rebasedirektifleri doğrultusunda ne olursa olsun argümanlar birleştirme (veya rebase) ihtiyaç vardır) [branch ...]bölümünde. Bu durumda, [branch "feature/Sprint4/ABC-123-Branch"]bölümünüzden getirme origin, ardından adın altında bulunan herhangi bir kimlikle birleştirmeyi söyler refs/heads/feature/Sprint4/ABC-123-Branch.

Bu isim altında hiçbir şey bulunmadığından git pullşikayet ve durur.

Bunu iki ayrı adım olarak git fetchve ardından git merge(veya git rebase) olarak çalıştırdıysanız Git'iniz, remotes/origin/neyle birleştirileceğini veya yeniden birleştirileceğini görmek için önbelleğe alınmış uzaktan izleme dallarınıza bakar . Orada ise oldu böyle bir dal bir anda, yine uzaktan izleme dalı olabilir. Bu durumda hata mesajı almazsınız. Orada böyle bir dal değildi, ya da eğer yayınlanmadığını git fetchile --prune(ölü uzaktan izleme dalları kaldırılır), hiçbir karşılık gelen uzaktan izleme şubesi var ki, bir şikayet alacağı, ancak bakın olur origin/feature/Sprint4/ABC-123-Branchonun yerine.

Her iki durumda da , feature/Sprint4/ABC-123-Branchşu anda adlandırılan uzaktan kumandada mevcut olmadığı sonucuna varabiliriz origin.

Muhtemelen bir seferde vardı ve muhtemelen yerel şubenizi uzaktan izleme şubesinden oluşturdunuz. Öyleyse, muhtemelen uzaktan izleme şubesine sahipsiniz. Şubeyi kimin uzaktan kumandan çıkardığını ve nedenini araştırabilir veya yeniden oluşturmak için bir şeyleri itebilir veya uzaktan izleme dalınızı ve / veya yerel şubenizi silebilirsiniz.


1 En azından itiraf edeceği her şey . Ancak bazı referansları gizlemedikçe, liste her şeyi içerir.


Git pull komutunun gerçekte ne yaptığını açıkladığınız için teşekkür ederiz. Git getirme ve sonra birleştirme çalıştırarak sorunumu gidermek mümkün.
fizch

11
Yerel deponuzda varolmayan uzak şube referanslarını kaldırmak için şunu kullanın:git remote prune origin
Yoav

1
Ben-Uri @: evet ya, koşmak git fetch --prune originya seti fetch.pruneiçin trueyapılandırmanızda (her üç Git birkaç sürümlerinde bunlardan bazıları oldukça güvenilir olmasa da, aynı şeyi yapmak için tasarlanmıştır).
torek

1
git checkout <your remote branch>(Bazı durumlarda) iyi olmalısınız .
Alexander Shtang

3
@JonathanBenn: git branch --set-upstream-to=origin/master masterbölgeniz için yukarı akış ayarını değiştirmek için kullanabilirsiniz master. Silme ve yeniden oluşturma, yan etki olarak ( git checkout masteronu oluşturmak için DWIM stilini kullandığınızı varsayarak ), sizi mastereşleştirmek için ek bir yan etkiye sahiptir origin/master.
torek

72

Bu, siz / biri şubeyi yeniden adlandırdıysanız da olabilir. Bu nedenle, aşağıdaki adımları izleyin (şube adının yeniden adlandırıldığını biliyorsanız) Daha önceki şube adını olduğu wrong-branch-nameve birisinin adı correct-branch-nameSo olarak değiştirdiği varsayılarak .

git checkout correct-branch-name

git pull ("Yapılandırmanız belirtiyor .." ifadesini görürsünüz)

git branch --unset-upstream

git push --set-upstream origin correct-branch-name

git pull (önceki mesajı alamazsınız)


1
Hatta gerekli git pushdeğildir ve mevcut şube uzaktan kumandasının arkasındaysa çalışmaz. git pull origin correct-branch-nameyeterlidir.
Pierre

2
Yukarı akış ayarlama komutu yukarıda yanlış. --Unset-upstream işleminden sonra bir git pull yapın, çekme işleminin çıkışında, yukarı akış ayarlama komutu ile aşağıdaki gibi bir hata görebilirsiniz: git branch --set-upstream-to = origin / <branch > mybranch
Ankit Marothi


40

Uzak dalınızın çekilip çekilemeyeceğini kontrol edin. Aynı sorunu yaşadım, sonunda uzak dalın birisi tarafından silindiğini fark ettim.


4
Benim için de aynıydı!
Aerin

3
Bir çekme isteğinden sonra, birleşme (yani birleştirme yapan kişi) hedef dalda birleştirilen dalı silme seçeneğine sahiptir. Bu noktada çekmeye çalışırsanız, bu hatayı alırsınız.
Artokun

bu doğru :)
Malhaar Punjabi

7

Benim için bu bir vaka duyarlılığı sorunuydu. Yerel şubem Version_Feature2 yerine Version_feature2 idi. Doğru gövdeyi kullanarak şubemi tekrar kontrol ettim ve sonra git pull çalıştı.


2
Bu da benim sorunum oldu. Oldukça uzun / karmaşık şube isimleriyle açık olması gerekli değildir.
Håkon K. Olafsen

6

Bu hata, kaynak şube adında bazı vaka sorunları olduğunda da alınabilir.

Örneğin: kaynak şube team1-Teamve yerel şube olarak ödeme yapılıyor team1-team. Ardından, bu Tiçinde -Teamve tde -teambu tür hataya neden olabilir. Bu benim durumumda oldu. Böylece, yerel adın kökeni şube adıyla değiştirilerek hata çözüldü.


6

Benim durumumda, uzak dalda ilk taahhüdü yoktu, bu yüzden yerel şube çekilecek bir şey bulamadı ve bu hata mesajını veriyordu.

Yaptım:

git commit -m 'first commit' // on remote branch
git pull // on local branch

4

Gerçek nedeni diskimin dolu olması durumunda da benzer bir hata aldım. Bazı dosyaları sildikten sonra git pullbeklediğim gibi çalışmaya başladı.


4

Bu sorunla karşılaşmaya devam ettim. Benim durumumda, @ Jerreck'in şube adlarındaki vaka farklılıkları hakkındaki yorumu bu hatanın nedeni oldu. Bazı Windows araçları büyük / küçük harf duyarlılığının farkında değildir.

Git'te büyük / küçük harf duyarlılığını kapatmak için şu komutu çalıştırın:

git config --global core.ignorecase true

Bunun şube adlarından daha fazlasını etkileyeceğini unutmayın. Örneğin, aynı dizinde "Foo.h" ve "foo.h" varsa (Windows için yazılım oluştururken harika bir fikir değil), büyük / küçük harfe duyarlılığı kapatamayacağınızdan şüpheleniyorum.


2

Birisinin uzaktan kumandadan şubeyi sildiğini kontrol edin.


1

Benim durumumda, mevcut şubemin türetildiği orijinal dalı silmiştim. Yani .git / config dosyasında vardı:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.0.5
    rebase = false

simil2.0.5 silindi. Aynı şube adıyla değiştirdim:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.1.12
    rebase = false

ve işe yaradı


1

Çalıştırarak yerel şubenizi uzak şubeye kolayca bağlayabilirsiniz:

git checkout <your-local-branch>
git branch --set-upstream-to=origin/<correct-remote-branch> <your-local-branch>
git pull

0

Benim için bu, web arayüzünü kullanarak bir şube geliştiricisini master'a birleştirdiğim ve daha sonra dev dalında açık olan VSCode kullanarak senkronize etmeye / çekmeye çalıştığımdan dolayı oldu.

git pull
Your configuration specifies to merge with the ref 'refs/heads/dev'
from the remote, but no such ref was fetched.'

Refs / heads / dev'i bulamamak mantıklı - benim için sadece yerel klasörü silmek ve tekrar klonlamak daha kolaydı.


0

Diskim dolu olduğunda "git pull" yaparken tam olarak bu hatayı aldım. Biraz yer yarattı ve her şey tekrar iyi çalışmaya başladı.


0

~/.gitconfigDosyayı ana klasörünüzde düzenleyebilirsiniz . Burası tüm --global ayarlarının kaydedildiği yerdir.

Veya, depo url'si ile git config --global --unset-all remote.origin.urlçalıştırın ve çalıştırdıktan sonra git fetch.


0

Şuanki branşımın dev olduğu aynı sorunla karşı karşıya kaldım ve MR şubesine gidip daha sonra git çekimi yapıyordum. Aldığım kolay bir çözüm, MR Branch için yeni bir klasör oluşturdum ve oraya git ve ardından git klonu izledim.

Temelde kodu farklı bir şubeye göndermek için farklı klasörleri korudum.


0

Doğru hatayı kullanmadığımda aynı hatayı aldım. Ben 'entegrasyon' ödeme olabilir. Git bana şubemi git pullgüncellemek için bir performans sergilememi söyledi . Bunu yaptım, ancak belirtilen hatayı aldım. Doğru şube adı büyük 'I' ile 'Entegrasyon'dur. O dalı kontrol edip çektiğimde sorunsuz çalıştı.


-2

Başka bir çekim işe yararsa, internetiniz bağlı değil demektir.


Bir dizi downvotes ve henüz bu hatayı almamın nedeni buydu. İnternetim vardı ama git sunucumun VPN'ini kaybettim. VPN'ye yeniden bağlandıktan sonra, çekme iyi çalıştı.
Ben Thurley
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.