git pull "referans çözümlenemiyor" "yerel referans güncellenemiyor"


606

Git 1.6.4.2 kullanarak, denediğimde git pullbu hatayı alıyorum:

error: unable to resolve reference refs/remotes/origin/LT558-optimize-sql: No such file or directory
From git+ssh://remoteserver/~/misk5
 ! [new branch]      LT558-optimize-sql -> origin/LT558-optimize-sql  (unable to update local ref)
error: unable to resolve reference refs/remotes/origin/split-css: No such file or directory
 ! [new branch]      split-css  -> origin/split-css  (unable to update local ref)

Denedim git remote prune origin, ama yardımcı olmadı.


Yanıtlar:


929

Yerel veri havuzunuzu aşağıdakilerle temizlemeyi deneyin:

$ git gc --prune=now
$ git remote prune origin

adam git-gc (1):

git-gc - Cleanup unnecessary files and optimize the local repository

git gc [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune]

       Runs a number of housekeeping tasks within the current repository, such as compressing file revisions
       (to reduce disk space and increase performance) and removing unreachable objects which may have been
       created from prior invocations of git add.

       Users are encouraged to run this task on a regular basis within each repository to maintain good disk
       space utilization and good operating performance.

adam git-remote (1):

git-remote - manage set of tracked repositories

git remote prune [-n | --dry-run] <name>

           Deletes all stale remote-tracking branches under <name>. These stale branches have already been
           removed from the remote repository referenced by <name>, but are still locally available in
           "remotes/<name>".            

96
Bu neden işe yarıyor? Çözdüğü sorun nedir?
Ikke

5
İkinci komut benim için çalıştı. Görünüşe göre yeni oluşturulmuş bir uzak dal için kırık bir referans vardı. Nasıl olduğundan emin değilim, ama basit bir düzeltme oldu sevindim. Teşekkürler Vitek!
JGTaylor

1
Bu mükemmel çalıştı! Bunun ne işe yaradığına ve bunun neden işe yaradığına dair bir açıklama da isterim. Teşekkürler!
ArielSD

4
Will git remote prune originkomut benim yerel çalışma kopyası üzerinde veya uzak depo üzerinde çalışır?
user1438038

3
@ user1438038 Herhangi bir dalı kaldırmamalı ve yalnızca yerel çalışma kopyanızdaki uzak başvuruları güncelleştirmelidir. Daha fazla bilgi için: stackoverflow.com/questions/20106712/…
Zengineer

606

Bana da oldu. Benim durumumda, kötü ref ustasıydı ve aşağıdakileri yaptım:

rm .git/refs/remotes/origin/master
git fetch

Bu git dosyasını ref dosyasını geri yükledi. Bundan sonra her şey tekrar beklendiği gibi çalıştı.


1
Aynı şeyi yaptım ve sorunumu çözdü. Dosyayı Notepad ++ ile açtığımda, dosya açıkça bozuldu.
theMayer

83
Emin yerine ustanın sizin için sorun oluşturuyorsa dosyayı seçmek yapmak
bia.migueis

6
@ bia.migueis: Efendiyi yanlışlıkla kaldırırsanız hiçbir şeye zarar vermez - bir sonraki getirme de güncellenir.
naught101

2
Bir alt modülse, ref'yi bulmak biraz zor olabilir. Öncelikle eğer .gityapmadan bir klasör olup olmadığını kontrol edin , ref'lerin bulunduğu gerçek .git klasörünü bulmak için ls -ladosya .gitdosyasının içeriğine bakın . .gitbenim durumumda dosya içeriği: gitdir: ../.git/modules/my-submodule-name
CCoder

1
Geçen yıl iki kez bunu düzeltmek için geri döndüm ve tekrar, bu gerçekten işe yarayan tek düzeltme.
Ted

131

Bu benim için işi yaptı:

git gc --prune=now

5
Bu işe yaradı. Günümü kurtardığın için teşekkürler! @Bernd Komutun olası açıklaması var mı?
nashcheez

git gc dokümanlar burada
BigRon

1
Benim için de çalıştı. git remote prune origin
Koşmaya

87

Benim için, hataları dosyadan atan dosyaları kaldırmak için çalıştı .git/refs/remotes/origin/.


yaptı! Ama meraktan sadece bu hatanın neden geldiğini biliyor musunuz? (her şey iyi çalışıyordu ve sonra aniden bir gün bu hata ortaya çıktı). Ayrıca dosyayı silmenin nasıl çözüldüğünü de biliyor musunuz?
Shreyans

Bunu duymak güzel, senin için de düzeltti. Dürüst olmak gerekirse, hatanın görünmesine neden olan hiçbir fikrim yok. Benim düşüncem, klasördeki dosyalardan birinin senkronize olmamasıydı. Benim için çalıştı buldum diğer düzeltmeler hiçbiri bu son çare olarak kullanılır.
Brian van Rooijen

Harika çalıştı! Soruna neden olan tüm dosyaları (aldığınız hata raporuna dayanarak) silmeniz gerektiğine dikkat edin, sanki sadece birini silip geri çekmeyi deneyin.
Rayee,

1
Ben de açıklandığı gibi olası nedenlerinden biri sistem çökmesi olabilir Cevabıma . Birçok Git GUI uygulaması düzenli olarak Git'i deponuzda çalıştırır (durumu yenilemek için) ve Gitiniz referanslarla işlem yaparken sisteminiz çökerse, NULLs ile yeniden yazılabilir .
David Ferenczy Rogožan

53

Dene:

git gc --prune=now

git remote prune origin

git pull

26
Bu, yazarların sorusunu cevaplasa da, açıklayıcı kelimeler ve / veya belgelere bağlantılar içermez. Ham kod parçacıkları, çevrelerindeki bazı ifadeler olmadan çok yararlı değildir. Ayrıca bulabilirsiniz iyi bir cevap yazmayı çok yararlı. Lütfen cevabınızı düzenleyin.
Roy Scheffers

Tam olarak nokta. Kodu düzeltmek için yeterli değil ve hepsi bu. Umarım bir açıklama vardır
Musikero31

1
git gc --prune = artık gereksiz dosyaları silerken yerel havuzu günceller. Benim için iyi çalışıyor.
Vasyl Gutnyk

44

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

rm .git/refs/remotes/origin/master

git fetch

git branch --set-upstream-to=origin/master

Eğer ne olduğunu bilmek gerekiyorsa Her ihtimale karşı, .git/refs/remotes/origin/master, sen okurdu Uzak bölümüne Git Referanslar .


1
.Git / refs / uzaktan kumandalar / origin / branchName'in ne olduğunu açıklayabilir misiniz? Bu çözüm benim için çalıştı
caitcoo0odes

44

Sadece bir referansın kırılmasının nasıl olabileceğini eklemek istiyorum.

Olası kök neden

Sistemimde (Windows 7 64 bit), bir BSOD oluştuğunda , depolanan referans dosyalarının bazılarının (büyük olasılıkla şu anda açılmış / BSOD gerçekleştiğinde içine yazılmış) üzerine yazılmasıNULL karakterlerle (ASCII 0) .

Diğerlerinin de belirttiği gibi, düzeltmek için, bu geçersiz referans dosyalarını silmek ve havuzu yeniden almak veya yeniden çekmek yeterlidir.

Misal

Hata: cannot lock ref 'refs/remotes/origin/some/branch': unable to resolve reference 'refs/remotes/origin/some/branch': reference broken

Çözüm: Dosyayı silin%repo_root%/.git/refs/remotes/origin/some/branch


1
Windows 10 64bit için aynı senaryo - BSOD olduğunda git repo ile çalışma. error: cannot lock ref 'refs/remotes/origin/master': unable to resolve reference 'refs/remotes/origin/master': reference broken. git pullDöndürülen ilk dosyayı sildikten sonra yapmaya çalışıyorum fatal: update_ref failed for ref 'HEAD': cannot lock ref 'HEAD': unable to resolve reference 'refs/heads/master': reference broken. İkinci dosyayı sildikten sonra git pull origin masterbaşarılı oldu.
cjmcdonn

39

Ben de aynı sorunu vardı ve hata yaptığı dosyaya giderek çözüldü:

\repo\.git\refs\remotes\origin\master

Bu dosya null'larla doluydu, github'dan en son ref ile değiştirdim.


2
Aynı sorun vardı, ama dosya .git/refs/remotes/origin/mastersadece boştu. Sorunu kaldırarak çözdü.
Zinovyev

38

Benim durumumda, dizin altındaki tüm kaldırma referans dosyalarını sildikten sonra sorun çözüldü .git .

Mesaja bakarsanız, hangi dosyaları silmeniz gerektiğini söyler (özellikle).

Silinecek dosyalar altında bulunur .git/refs/remotes.

Oradaki tüm dosyaları sildim ve gc kuru erik koştum

git gc --prune=now

Bundan sonra, her şey iyi çalışıyor.


Benim durumumda sadece .git / refs / uzaktan kumandaları silip sunucuyu güncelleyip aktarıyorum ve işe yaradı.
Faraz Ahmed

Teşekkürler Uri. Benim durumumda sadece refs / uzaktan kumandalar / kökeni / özelliği altında dosyaları sildim ve sadece yaptım - git pull
Deepboy

26

Açıklama : Yerel referanslarınız güncellenmemiş ve varolmayan referanslara işaret ediyor olsa da, uzak repo (Github / bitbucket'te) şubeleriniz kaldırılmış gibi görünüyor.

Bu sorunu çözmek için:

git fetch --prune
git fetch --all
git pull

Ekstra okuma için - Github belgelerinden referans :

git-fetch - Başka bir depodan nesne ve başvuru indir

--all Tüm kumandaları getir .

--prune Getirdikten sonra, artık uzaktan kumandada bulunmayan uzak izleme dallarını kaldırın.


1
Bu benim için çalıştı
Onengiye Richard

1
Teşekkürler, benim için çalıştı.
Sam

17

git fetch --prune bu hatayı benim için düzeltti:

[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:25]
[I]> git fetch
error: cannot lock ref 'refs/remotes/origin/user/janek/integration/20170505': 'refs/remotes/origin/user/janek/integration' exists; cannot create 'refs/remotes/origin/user/janek/integration/20170505'
From github.com:zooxco/driving
 ! [new branch]            user/janek/integration/20170505 -> origin/user/janek/integration/20170505  (unable to update local ref)
From github.com:zooxco/driving
[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:30]
[I]> git fetch --prune
 - [deleted]               (none)     -> origin/user/janek/integration

Bu, rahatsız edici dalın uzaktan kumandadan silindiğini varsayar.


Örneğiniz eksik görünüyor: --prunegörebildiğimi göstermiyor. Ayrıca proTip: örnekleri yapıştırdıktan sonra gereksiz parola istemlerini kaldırın.
MarkHu

Kesinlikle haklısın - Getirme komutundan çıktıyı bıraktım ama sadece örneğe koydum. Şifre istemini kaldırmayla ilgili ipucu için de teşekkür ederiz!
marczych

11

Vojtech Vitek veya Michel Krämer tarafından yanıt uygulandıktan sonra bile bu hata “yerel referans güncellenemiyor” tekrarlanıyorsa , yerel VE ana veri havuzunuzda kötü bir referansınız olabilir.

Bu durumda, her iki düzeltmeyi de çekmeden veya arasında itmeden uygulamalısınız ...

rm .git/refs/remotes/origin/master
git fetch
git gc --prune=now
git remote prune origin

Benim için kalıcı bir çözünürlük ancak itme / çekme öncesi her iki düzeltmeyi uyguladıktan sonra elde edildi.


1
Bunun için teşekkürler. Ben örneğin başarısız oldu şube ile üstad yerini o notu - rm .git / ref / uzaktan kumanda / köken / geliştirmek
Damien Sawyer

1
Cevabınız için teşekkür ederim, gerçekten yardımcı oldu!
naffiq

1
Bu benim için çalıştı
byJeevan

10

Bunu çok kısa bir süre içinde cevaplamak için, yerel sorun uzaktan kumandayla ilgili bazı bilgiler olduğunda ve birisi uzaktan kumandayı ve değişikliklerinizi senkronize olmayan bir şey değiştirdiğinde bu sorun ortaya çıkar.

Birisi uzak dalı sildiğinden ve aynı adla yeniden oluşturduğundan bu sorunu alıyordum.

Bu tür sorunlarla başa çıkmak için uzaktan çekin veya getirin.

git remote prune origin

veya herhangi bir GUI kullanıyorsanız uzaktan kumandadan getirme yapın.

resim açıklamasını buraya girin



3

Bunu dene:

git pull origin Branch_Name

Branch_Name, şu anda bulunduğunuz şube.

Yalnızca a yaparsanız git pull, oluşturulan tüm diğer şube adlarını da çeker.

Bunu almanızın nedeni de budur:

! [new branch]      split-css  -> origin/split-css  (unable to update local ref)

2

Benim için yerel bir şubem vardı feature/phase2ve uzak şubenin adı feature/phase2/data-model. Adlandırma çakışması sorunun nedeniydi, bu yüzden yerel şubemi sildim (tutmanız gereken bir şey varsa yeniden adlandırabilirsiniz)


Burada aynı sorun - bizimki de bir Mac / PC vaka adlandırma sorunuydu, bu da onu tespit etmeyi zorlaştırdı (bir isim büyük harfle yazılmış, diğeri değil - ve PC'de çalıştı, ancak Mac'te değil)
rocksteady

2

Eğer git gc --prune=nowdoz size yardımcı olmazsa . (benim gibi kötü şanslar)

Yaptığım, projeyi yerel olarak kaldırmak ve tüm projeyi tekrar klonlamak.


Bu, bu web sitesinde herhangi bir upvotes almayı beklemediğim bir "Bir hata mesajı aldım, bu yüzden yeni bir bilgisayar aldım".
Stephan Vierkant

2

Tower kullanıyorum ve nedense klasör adımdı .git/refs/remotes/origin/Github. Küçük harfle değiştirmek .git/refs/remotes/origin/githubsorunu çözdü.


1

Ben de aynı sorunu yaşadım. aşağıdaki adımları takip ediyorum

1) sorunu olan şubenizi diğer şubeye geçirin

2) bu dalı silin

3) tekrar ödeme.

Not: - Size taahhüt edilmemiş değişiklikleri saklayabilir ve tekrar geri koyabilirsiniz.



0

Besteci güncellemesinde de aynı sorunu yaşadım. Ama benim için sadece besteci önbelleğini temizledikten sonra ve satıcı klasörünün içeriğini sildikten sonra çalıştı:

rm -rf vendor/*
git gc --prune=now
git pull
composer clear-cache
composer update my/package

0

git bundleOluşturulan bir dosyadan klonlamaya çalışırken bu sorunu aldım , diğer cevapların hiçbiri işe yaramadı çünkü repo'yu klonlayamadım (böylece git gcve dosyaları kaldırma / düzenleme söz konusu değildi).

Ancak bunu düzeltmenin başka bir yolu vardı - bir .bundledosyanın kaynak dosyası ile başlıyordu:

# v2 git bundle
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d HEAD
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master

PACK.......p..x...Kj.0...: (and so on...)

Vim ile dördüncü satırı kaldırmak sorunu çözdü.


0

SourceTree kullanırken bu sorunu yaşadım. Tekrar çekmeye çalıştım ve işe yaradı. Sanırım dalları çok hızlı büyüyordum (çıkış) :).

Durumum posterinkinden biraz farklı çünkü depom görünür bir yolsuzluk olmadan nispeten işbirlikçi.


0
 # remove the reference file of the branch "lost"
 rm -fv ./.git/refs/remotes/origin/feature/v1.6.9-api-token-bot-reader

 # get all the branches from the master
 git fetch --all

 # git will "know" how-to handle the issue from now on
 #     From github.com:futurice/senzoit-www-server
 # * [new branch]      feature/v1.6.9-api-token-bot-reader ->
 # origin/feature/v1.6.9-api-token-bot-reader

 # and push your local changes
 git push

0

Depo silindiğinde ve aynı adla oluşturulduğunda aynı sorunla karşılaştı. Yalnızca uzak URL'yi aşağıdaki gibi yeniden ayarladığımda çalıştı ;

git uzak set-url menşei [GIT_REPO_URL]

Uzak URL'yi doğrulayın:

git remote -v

Şimdi, tüm komutlar her zamanki gibi çalışmalıdır.


0

Sadece bugün sorunla karşılaştı.

Sorun giderme yöntemi: Windows Sunucularında SourceTree ile bunu Yönetici olarak çalıştırmayı deneyebilirsiniz. Bu, etki alanındaki bir Windows Server 2012 R2 üzerindeki Atlassian Source Tree 2.1.2.5 sürümünde "yerel ref güncelleştirilemedi" sorunumu giderir.

Bu durumu çok fazla çoğaltabiliyorsanız, sorunun izin sorunundan kaynaklandığını kanıtlar. Temel nedeni incelemek ve bulmak daha iyidir - muhtemelen bazı dosyalar diğer kullanıcılara aittir ve böyle - aksi takdirde istenmeyen bir yan etkisi vardır: sonsuzluğun geri kalanı için SourceTree'yi Yönetici olarak çalıştırmanız gerekir.


Bunu tavsiye etmem. Yanlış izinlere sahip daha da fazla dosya ile karşılaşacaksınız. Ayrıca, depo dosyaları ile manipüle edilen her şeyi yönetici olarak çalıştırmanız gerekir. İlk etapta izinleri düzeltmek daha iyi değil mi?
David Ferenczy Rogožan

Haklısın. Ancak bunu Yönetici olarak çalıştırdıktan sonra izin meselesi olduğunu anladım. Bu benim teşhis prosedürümde bir adımdı, kendi başına mükemmel bir çözüm değildi.
Lionet Chen

Elbette. Ancak birçok kullanıcı, sonuçları gerçekten bilmeden yanıtınızı bir çözüm olarak alabilir. İzinlerin düzeltilmesini önerilen bir çözüm olarak eklerseniz daha iyi olabilir.
David Ferenczy Rogožan

0

Bu soruna neden olabilecek belirli bir vakayı yazmak.

Bir gün uzaktan kumandada "özellik" dalına sahipken "özellik / alt özellik" adlı bir kolu ittim.

Hepsi aynı hata mesajı vardı, o operasyon yanımda herhangi bir hata olmadan cezası çalıştı, ama benim iş getirilen zaman ve / veya herhangi bir şube çekti unable to update local ref, cannot lock ref 'refs/remotes/origin/feature/subfeature.

Bu, featureremote ( git push --delete origin feature) üzerindeki şubeyi silerek ve sonra da git remote prune origindahil olmak üzere mesajlar üreten iş arkadaşımın deposunda çalışarak çözüldü * [pruned] origin/feature.

Yani, tahminim git dahili olarak klasörde ref (.git / ...) git fetcholuşturmaya çalışıyordu , ancak zaten ref olduğu için klasör oluşturma başarısız oldu .subfeaturefeaturefeature


0

Mac'teki bir geliştirici, şube adında ">" simgesinden daha büyük bir şube oluşturduğunda bu sorunu çözdük.

Bu, TeamCity ve SourceTree çalıştıran yerel Windows tabanlı bilgisayarlarda sorunlara neden oldu. BitBucket herhangi bir sorun yaşamadan geçmesine izin verir.

Kullanıcıyı çözmek için dalı kaldırdı ve yeniden yarattı. Hangi güzel ve kolay oldu.


-1

Aynı msj vardı ama bir dizin ile çekme başarısız bir msj var.

git --prone de bana yardım etmedi. Uzaktan oluşturulan bir dizin ile aynı ada sahip bir dosya olduğu anlaşılıyor.

.Git \ logs \ refs \ remotes \ origin'ye gitmek ve yerel dosyayı silmek zorunda kaldım - sonra tekrar çekin, hepsi iyi.

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.