“Yollar güncellenemiyor ve aynı anda şubeye geçilemiyor”


186

Bazen checkout -byeni bir şube oluşturmak, aynı anda kontrol etmek ve tek bir komutta izleme ayarlamak için bu seçeneği kullanıyorum .

Yeni bir ortamda bu hatayı alıyorum:

$ git checkout -b test --track origin/master
fatal: Cannot update paths and switch to branch 'test' at the same time.
Did you intend to checkout 'origin/master' which can not be resolved as commit?

Git neden sevmiyor? Bu aynı repo ile çalışırdı.


6
Hata iletisi size origin/masterbir taahhüt kimliği olmadığını, yani geçerli bir uzak dal olmadığını söylüyor . O görünür mü git branch -rçıktı?
torek

Olmadı. Klon sırasında tüm uzak dalları kontrol etmediğim ortaya çıkıyor.
marekful

Yanıtlar:


199

' origin/master' taahhüt olarak çözülemeyen

Garip: Uzaktan kumandalarınızı kontrol etmeniz gerekiyor:

git remote -v

Ve origingetirildiğinden emin olun :

git fetch origin

Sonra:

git branch -avv

(bir origin/masterşube getirip getirmediğinizi görmek için )

Son olarak, Git 2.23+ (Ağustos 2019) ile kafa karıştırıcıgit switch yerine kullanın .git checkout

git switch -c test --track origin/master

11
Komutumda bu hatayı tetikleyen bir yazım hatası vardı; Uzaktan kumandayı doğru yazmıyordum!
qix

2
Yeni bir şubeydi ve yerel veri havuzum bunu bilmiyordu. Bunu yapmak zorunda kaldım pullve sonra bu komut işe yaradı.
coding_idiot

2
Bu cevap yardımcı oldu çünkü bana gerçekten garip bir şey olduğunu gösterdi: Uzaktan kumandalar doğru ayarlandı, ancak yeni uzak dal sadece getirilmedi. Uzaktan kumandayı temiz bir dizinde klonladığımda çalışır. Dizinim bir .gitşekilde bozuk olabilir mi?
Konrad Rudolph

git remote -v bu hatayı döndürdü ölümcül: Geçerli bir nesne adı değil: 'uzak'.
Karim Samir

@KarimSamir ayrı bir soru sorabilirsiniz (işletim sistemi ve git sürümü ile), git remote -vgit repo yürütülür gibi çalışır.
VonC

79

FWIW: Şube adınızda bir yazım hatası varsa, aynı hatayı alırsınız.


4
Aslında biri Git geliştiricilere bunu anlatmak için zaman alabilir olsaydı iyi olurdu, hata mesajı çok bilgilendirici değil;)
Scorchio

8
evet, bu benim
Karim Samir

Burada aynı git checkout -b origin mybranch, git checkout -b mybranch(ekstra origin) yerine
deniyordum

Şube adımı kopyaladım ve bu hataya neden olan şube adından sonra boşluk bıraktım.
learningKnight

Bunun orgin/my-branchyerine ödeme yapmaya çalışıyordum origin/my-branch. Birini özledim ive eski bir müttefikin neden geçinmeyi reddettiğini anlamak için bir süre başımı tırmalamaya devam ettim. Sorun gerçekten yazım hatasıydı.
DDM

55

Bu hatayı, örneğin varsayılan olarak kodu kontrol eden bir Travis derlemesi bağlamında alabilirsiniz git clone --depth=50 --branch=master. Bildiğim kadarıyla, --depthüzerinden kontrol edebilirsiniz .travis.ymlama değil --branch. Bu, uzaktan kumanda tarafından yalnızca tek bir dalın izlenmesine neden olduğundan, istenen uzaktan kumandanın referanslarını izlemek için uzaktan kumandayı bağımsız olarak güncellemeniz gerekir.

Önce:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

Çözüm:

$ git remote set-branches --add origin branch-1
$ git remote set-branches --add origin branch-2
$ git fetch

Sonra:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-1
remotes/origin/branch-2
remotes/origin/master

5
Benim için çözdüm. Sığ bir --depth = 1 klonu kullandım ve dalları değiştirmek için ihtiyacım olan buydu.
Sawtaytoes

1
Gah evet, derinlik kesinlikle bu hatayla sonuçlanır! Mümkünse, derinliği vurgulamak için ilk birkaç cümlenin düzenlenmesini öneririm.
Dubslow

19

Bu basit şey benim için çalıştı!

Aynı anda 2 şey yapamayacağını söylüyorsa, onları ayırın.

git branch branch_name origin/branch_name 

git checkout branch_name

Gerçek sorunun ne olduğunu bulmayı kolaylaştırır
Z. Khullah

9

Bu sorunla karşılaştığınızda aşağıdaki adımları uygulayabilirsiniz:

  1. Yerel deponuz için bilinen dalları listelemek için aşağıdaki komutu çalıştırın.

uzaktan göster menşei git

bu çıktı:

 remote origin
  Fetch URL: <your_git_path>
  Push  URL: <your_git_path>
  HEAD branch: development
  Remote branches:
    development                             tracked
    Feature2                                tracked
    master                                  tracked
    refs/remotes/origin/Feature1         stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    Feature2     merges with remote Feature2
    development  merges with remote development
    master       merges with remote master
  Local refs configured for 'git push':
    Feature2     pushes to Feature2     (up to date)
    development  pushes to development (up to date)
    master       pushes to master      (local out of date)
  1. (URL getir vb.) Gibi ayrıntıları doğruladıktan sonra, uzaktan kumandada bulunan, ancak yerelinizde bulunmayan yeni bir dalı (yani yerel deponuzda ödeme yapmak isteyebileceğiniz) almak için bu komutu çalıştırın.
» git remote update

Fetching origin
From gitlab.domain.local:ProjectGroupName/ProjectName
 * [new branch]      Feature3    -> Feature3

Gördüğünüz gibi yeni şube uzaktan çekildi.
3. Son olarak, bu komutla şubeye göz atın

» git checkout -b Feature3 origin/Feature3

Branch Feature3 set up to track remote branch Feature3 from origin.
Switched to a new branch 'Feature3'

Git'e şubeyi uzaktan kumanda ile izlemesini ( --track kullanarak ) açıkça söylemenize gerek yoktur .

Yukarıdaki komut, yerel dalı uzak dalı başlangıç ​​noktasından izlemek üzere ayarlayacaktır.


4

Şubenizde beyaz alan varsa, bu hatayı alırsınız.


1

Benim için uzaktan kumandayı eklemem gerekiyordu:

git remote -add myRemoteName('origin' in your case) remoteGitURL

sonra getirebilirim

git fetch myRemoteName

1

Bunun nedeni, yerel şubenizin uzak dalı izlememesidir. Ssasi'nin dediği gibi, şu komutları kullanmanız gerekir:

git remote update
git fetch
git checkout -b branch_nameA origin/branch_nameB

Sorunumu şimdi çözdüm ....


0

İlk Fetchönce uzaktan kumandaya (belirli dal) ihtiyacınız var, daha sonra yerel bir br oluşturabilir ve komutunuzu kullanarak bu uzak dal ile izleyebilirsiniz (yani checkout-b ve --track ile).


0

Alt modül yönüne gitmeli ve koşmalısınız git status.

Çok sayıda dosyanın silindiğini görebilirsiniz. Koşabilirsin

  1. git reset .

  2. git checkout .

  3. git fetch -p

  4. git rm --cached submodules // submoudles senin adın

  5. git submoudle add ....


0

Şu komutları kullanabilirsiniz: git remote update, git fetch, git checkout -b branch_nameA orijin: branch_nameB

Sanırım belki de yerel şubeniz uzak şubeyi takip edemediği için

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.