Git Checkout: Yolların güncellenmesi anahtarlama şubeleriyle uyumsuz


467

Benim sorunum şube değiştirilirken Fatal Git hatası ile ilgilidir .

Komut ile uzak bir dal getirmeye çalışıyorum

git checkout -b local-name origin/remote-name

ama bu hata mesajını alıyorum:

fatal: git checkout: yolların güncellenmesi anahtarlama dalları ile uyumsuz.
Taahhüt olarak çözülemeyen 'başlangıç ​​/ uzak ad' ı kontrol etmek istediniz mi?

Manuel olarak bir dal oluşturup uzak dalı çekersem, tıpkı yeni bir klon yapmak ve dalı kontrol etmek gibi çalışır.

Neden birlikte çalıştığım depoda çalışmıyor?


1
bu komutun ilk örneğinden bu yana neler değişti (hata mesajını tetikleyen)?
VonC

git init git getir git git getir: //blabla.com/dir1/Project.git

Yanıtlar:


739

Bu yerel git repo henüz farkında değil uzak bir şube ödeme çalışırken oluşur inanıyorum. Deneyin:

git remote show origin

Ödeme yapmak istediğiniz uzak dal "İzlenen uzak dallar" ın altında değil "Yeni uzak dallar" altındaysa, önce onları getirmeniz gerekir:

git remote update
git fetch

Şimdi çalışmalı:

git checkout -b local-name origin/remote-name

7
Bu benim için sorunu çözdü, yukarıdaki keyfi cevap değil.
Jessedc

21
Bu depodaki tüm şubeleri almak için "git getirme REPOSITORY_NAME" olmalıdır.
Mike Thomsen

1
şart değil. git fetchtüm şubeleri tüm uzak depolardan alacaktır.
Michael Grinich

4
Herkesin tüm bunların çılgınlığı ile mücadele etmesi durumunda: git fetch origin / branchname git fetch ile aynı değildir . Birincisi sadece git remote show orijini aracılığıyla görülebilen bir sütunda "yeni (sonraki getirme uzaktan kumandalar / orijinde saklanır)" ile sonuçlanır.
Alexander Kellett

7
Bunu açıkça eklediğiniz bir uzaktan kumanda için yapmaya çalışıyorsanız (bu nedenle menşe dışında herhangi bir şey ) git remote updategetirmeniz o uzaktan kumandayı getirmeden önce yapmanız gerekir . Aksi takdirde, Did you intend to checkout 'upstream-repo/master' which can not be resolved as commit?lütfen cevabı ekleyin ve insanlara sadece başlangıç ​​için çalışan aynı cevapları okumaya değer saatler kaydedin.
Bruno Bronosky

150

Alternatif sözdizimi,

git fetch origin remote_branch_name:local_branch_name

12
Bu benim için çalıştı. Uzak şube adım kaynak değil. Votka içtiğim için bunun bir fark yaratıp yaratmadığını bilmiyorum.
Rimian

13
Bu sadece alternatif bir sözdizimi değildir, ancak git checkout -b branch_name origin / branch_name çalışmadığında çalışabilir
codercake

1
Bu da başlangıçta OP ile aynı hatayı düzeltmeden önce aynı hata verdi "git checkout --track origin / remote-branch", çalışırken benim sorun çözüldü. Teşekkürler!
kakyo

1
Doğrulanmış cevabı çalıştırdıktan sonra benim için çalıştı.
AsTeR

2
Evet, --depthburada orijinal klon niteleyicisinin hatalı olabileceğinden şüpheleniyorum . Başarı elde ettim git fetch remote_branch_name:local_branch_nameama diğer tüm tavsiyeler başarısız oldu.
John Kelleher

46

Bu iş parçacığı başarı ile ne okuyabilir çoğu denedikten sonra, bu bir tökezledi: Uzak dal "git branch -r" görünmüyor

.Git / config dosyamın yanlış olduğu ortaya çıktı. Basit bir düzeltme yaptıktan sonra tüm dallar ortaya çıktı.

Giden

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

için

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Hile yaptı mı


4
Bu gerçekten garip bir yapılandırma. Git'e yalnızca ana dalı uzaktan kumandadan almasını söyler.
Ikke

3
Yapabilsem 10 kere oy verirdim! - Bu yeni git klonlama yaparken yaptığı bir şey gibi görünüyor
mpapis 27:03

2
Aynı problemim vardı, beni deli ediyordu. Uzak dalları görmeyen kimse, lütfen bunu kontrol edin !!
Carlos Granados

Cevabınız için çok şükür :)
Sacha

Zihin = şişmiş! Teşekkür ederim!
Chiranjib

12

Sorunun yararlı veya tam olarak alakalı olup olmadığından emin değilim, ancak uzak depodan yalnızca tek bir şube almaya ve ödemeye çalışıyorsanız , aşağıdaki git komutları işe yarayacaktır:

url= << URL TO REPOSITORY >>
branch= << BRANCH NAME >>

git init
git remote add origin $url
git fetch origin $branch:origin/$branch
git checkout -b $branch --track origin/$branch

11

Yukarıdakilerin hiçbiri benim için çalışmadı. Durumum biraz farklı, uzak şubem kaynak değil . ama farklı bir depoda.

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname

ipucu: uzak çıktıyı aşağıdaki çıktıda görmüyorsanız, git branch -v -abunu kontrol etmenin bir yolu yoktur.

1.7.5.4 üzerinde çalıştığı onaylandı


arf, sadece VirtualStaticVoid aynı çözüm olduğunu fark!
Olivier Refalo

+1 için git branch -v -a: Uzaktan fetch = +refs/heads/*:refs/remotes/master/*kumanda çağrılmış olmasına rağmen yanlış yapılandırılmış bir uzaktan kumandayım vardı upstream.
keflavich

7

Benim için işe yarayan şuydu:

git fetch

Bu, uzaktan kumandanın tüm dalları için tüm referansları makinenize çeker. Sonra yapabilirdim

git checkout <branchname>

ve bu mükemmel çalıştı. Üst oylamaya benzer, ama biraz daha basit.


4

Remote-name adlı uzak bir şube olmadığından, yanlışlıkla yanlışlıkla origin / remote-name adlı bir yerel şube oluşturduğunuzdan şüpheleniyorum.

Yazdığınız bir noktada mümkün mü?

git şube orijini / uzak ad

Yani origin / remote-name adlı bir yerel şube oluşturuluyor mu? Bu komutu yazın:

git çıkış kaynağı / uzak ad

Ya göreceksiniz:

"Başlangıç ​​/ uzak ad" dalına geçildi

yani bu gerçekten yanlış adlandırılmış bir yerel şube veya

Not: yerel bir şube olmayan "başlangıç ​​/ yeniden işleme-düzenleme" bölümüne geç
Bu ödeme kutusundan yeni bir şube oluşturmak istiyorsanız, bunu yapabilirsiniz.
(şimdi veya daha sonra) tekrar checkout komutuyla -b kullanarak. Misal:
  git ödeme -b 

yani gerçekten uzak bir dal.


3

Çok sezgisel değil ama bu benim için iyi çalışıyor ...

  mkdir remote.git & cd remote.git & git init
  git remote add origin $REPO
  git fetch origin $BRANCH:refs/remotes/origin/$BRANCH        

SONRA git branch --track komutunu çalıştırın ...

  git branch --track $BRANCH origin/$BRANCH

2

Benim için bir yazım hatası vardı ve uzak şubem yoktu

git branch -aUzak dalları listelemek için kullanın


1

Sorununuz bu diğer SO sorusu "ödeme sorunu" ile bağlantılı olabilir mi?

yani: aşağıdakilerle ilgili bir sorun:

  • Git'in eski bir sürümü
  • olmalıdır meraklı bir çıkış sözdizimi,: git checkout -b [<new_branch>] [<start_point>]ile, [<start_point>]bir ismine atıfta hangi yeni şube başlatın ve taahhüt 'origin/remote-name'bu değil.
    (oysa git branchuzak bir dalın adı olan bir başlangıç_ noktasını destekler)

Not: checkout.sh betiğinin söylediği:

  if test '' != "$newbranch$force$merge"
  then
    die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
  fi

Bu sözdizimi git checkout -b [] [remote_branch_name] hem dalı yeniden adlandırıyor hem de uyumsuz kabul edilen yeni dalın yeni başlangıç ​​noktasını sıfırlıyor gibiydi.


Problem çözüldü. git checkout -b yerel ad uzak / uzak şube aslında çalışıyor
Ikke

1
İlginç, o komutun ilk örneğinden bu yana neler değişti (hata mesajını tetikliyor)?
VonC

1

Milyonlarca kez getirildikten sonra hala eklenen lekeler havuzda olmasına rağmen uzaktan kumandalar ortaya çıkmadı. Herhangi bir nedenle --tags seçeneğine verilmemelidir git remote add. Git fetch'in referans oluşturmasını sağlamak için .git / config dosyasından el ile kaldırabilirsiniz.

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.