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.