Git: Yeni uzak dalı göremiyorum


118

Bir meslektaşım, yeni bir uzak dalı origin / dev / homepage'e itti ve çalıştırdığımda göremiyorum:

$ git branch -r

Hala önceden var olan uzak dalları görüyorum.

Bunun yerel uzak referanslarımın güncel olmamasından kaynaklandığını varsayıyorum, bu nedenle git pull çalıştırdığımda git pull yalnızca geçerli çalışma dalını çektiğinden hiçbir şey olmadı mı? İlgili uzak dala değişiklikleri olan tüm dalları iten git push'un aksine?


İlgili bir sorun - Uzak şubeyi göremiyorum
RBT

1
unutmayı başardı git pull, teşekkürler
JelenaČuklina

1
Benim durumumda git fetch <name-of-remote>hile yaptı. Uzaktan kumandanın adı olmadan çalışmadı.
Menno Deij - van Rijswijk

Yanıtlar:


166

İlk olarak, komutu kullanarak şubenin gerçekten uzaktan itildiğini iki kez kontrol edin git ls-remote origin. Yeni dal çıktıda görünürse, komutu deneyin ve verin git fetch: dal referanslarını uzak depodan indirmelidir.

Uzak dalınız hala görünmüyorsa, ( ls-remoteçıktıda) uzaktaki dal adının ne olduğunu ve özellikle ile başlayıp başlamadığını iki kez kontrol edin refs/heads/. Bunun nedeni, varsayılan olarak değerinin remote.<name>.fetchşudur:

+refs/heads/*:refs/remotes/origin/*

böylece yalnızca adı ile başlayan uzak referanslar, refs/heads/altında uzaktan izleme referansları olarak yerel olarak eşlenir refs/remotes/origin/(yani, uzaktan izleme dalları haline gelirler)


4
Git getirme kaynağı yaptıktan sonra yeni uzak dalı görebildim, ancak git getirme işlemi yaptığımda farkın ne olduğundan emin olamadım? Git uzaktan güncellemesini okudum, ancak bunun ne yapacağı net değildi. Buradan itibaren yeni uzak dallar için git fetch çalıştırmam gerekir mi?
hybrid9

1
@ hybrid9 kullanırsanız git fetch, git referansları içinde belirtilen varsayılan uzak depodan .git/configindirecektir: genellikle çağrılacaktır origin, bu nedenle her iki komut da eşdeğerdir, ancak özel konfigürasyonunuz bazı nedenlerden dolayı farklı olabilir. Hayır, git fetch(varsayılan olarak) tüm şubeleri getirdiği için her dal için vermenize gerek yoktur .
Marco Leogrande

1
@ hybrid9 git pull, git fetch+ git merge'ya eşdeğerdir (veya git rebasevarsayılanları değiştirdiyseniz), böylece git pullher zamanki gibi kullanmaya devam edebilirsiniz ve yeni uzak dallar kendiliğinden açılır.
Marco Leogrande

1
Başlangıçta git pull çalıştırdım ama kafamı karıştıran o yeni uzak dalı hiç görmedim. Sadece git getirme kaynağını çalıştırana kadar. Sorularımı yanıtlarken zaman ayırdığınız için teşekkür ederim.
hybrid9

2
@hybrid Aynı sorunu yaşıyorum. git ls-remote gerritrepo:projectyeni uzak dalı gösteriyor ama git branch -agöstermiyor ... Başka bir klon yapmam gerekiyor ve ancak o zaman yeni dal görünecek
Vikram

80

İçerip .git/configiçermediğini kontrol edin

[remote "origin"]
    url = …
    fetch = +refs/heads/master:refs/remotes/origin/master

Eğer öyleyse, söylemek için değiştirin

[remote "origin"]
    url = …
    fetch = +refs/heads/*:refs/remotes/origin/*

O zaman onu kullanabilmelisin:

$ git fetch
remote: Counting objects: …
remote: Compressing objects: ..
Unpacking objects: …
remote: …
From …
 * [new branch]            branchname -> origin/branchname
$ git checkout branchname
Branch branchname set up to track remote branch branchname from origin.
Switched to a new branch 'branchname'

12
Bu, ilk sığ klondan sonra başıma geldi.
ArkTekniK

Mükemmel!!! Çok teşekkürler! Bu, komutla özel bir Homebrew musluğu kurarken başıma geldi brew tap user/repo: klonlanan reponun yerel kopyası, brewbahsettiğiniz ayarlara sahipti ve depomdaki diğer şubeleri görmek ve kullanmak mümkün değildi. Tekrar teşekkürler! :) +1!
rmbianchi

3
.Git / config dosyasını manuel olarak düzenlemek yerine aşağıdaki komut kullanılabilir . git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"ve sonra git fetch origintüm şubeleri orijine almak için .
dotnetCarpenter

bu güzel bir tane!
madz

47

En basit cevap:

git fetch origin <branch_name>


2
Bu tam anlamıyla benim için işe yarayan TEK şeydi.
Theodore R. Smith

3
Benim için çalışmıyor. Şu hatayı alıyorum:fatal: Couldn't find remote ref <branch_name>
Parisa Khateri

3
evet benim için de işe yaradı, bu git kontrolünden sonra iyi çalıştı !!
whoami

30

Git uzaktan güncellemesi yapmak , uzak depodaki mevcut dalların listesini de güncelleyecektir.

TortoiseGit kullanıyorsanız 1.8.3.0 sürümünden itibaren "Git -> Eşitle" işlemini yapabilirsiniz ve görünen pencerenin sol alt kısmında bir "Uzaktan Güncelleme" düğmesi olacaktır. Bunu tıklayın. Daha sonra "Git -> Switch / Checkout" yapabilmeli ve yeni uzak şubenin seçebileceğiniz dalların açılır menüsünde görünmesini sağlamalısınız.


18
git remote updatebunu yapmanın eski bir yolu, daha yeni tercih edilen komuttur git fetch.

Benim TortoiseGit (2.8.0.0) sürümümde, sol alttaki düğmenin okun altında birden çok seçeneği var ve daha önce seçtiklerinizi hatırlıyor. Bu, düğmenin "Uzaktan Güncelleme" demeyebileceği anlamına gelir. Daha önce kullanmadıysanız "Çekin" diyecektir. Bu yüzden oka tıklayın ve seçenekler listesinde "Uzaktan Güncelleme" göreceksiniz.
Michael Hinds

14

Diyelim ki sürüm / 1.0.5 arıyoruz

Ne zaman git fetch -allolduğunu çalışmıyor ve uzaktan şube göremiyorum ve git branch -rdeğil bu özel şubesini göstermek.

1. Uzaktan tüm referansları yazdırın (dallar, etiketler, ...):

git ls-remote origin Aradığınız uzak şubeyi size göstermelidir.

e51c80fc0e03abeb2379327d85ceca3ca7bc3ee5        refs/heads/fix/PROJECT-352
179b545ac9dab49f85cecb5aca0d85cec8fb152d        refs/heads/fix/PROJECT-5
e850a29846ee1ecc9561f7717205c5f2d78a992b        refs/heads/master
ab4539faa42777bf98fb8785cec654f46f858d2a        refs/heads/release/1.0.5
dee135fb65685cec287c99b9d195d92441a60c2d        refs/heads/release/1.0.4
36e385cec9b639560d1d8b093034ed16a402c855        refs/heads/release/1.0
d80c1a52012985cec2f191a660341d8b7dd91deb        refs/tags/v1.0

Yeni dal olan 'release / 1.0.5' çıktıda görünür.

2. Uzak dalı getirmeye zorla:

git fetch origin <name_branch>:<name_branch>

$ git fetch origin release/1.0.5:release/1.0.5

remote: Enumerating objects: 385, done.
remote: Counting objects: 100% (313/313), done.
remote: Compressing objects: 100% (160/160), done.

Receiving objects: 100% (231/231), 21.02 KiB | 1.05 MiB/s, done.
Resolving deltas: 100% (98/98), completed with 42 local objects.
From http://git.repo:8080/projects/projectX
 * [new branch]        release/1.0.5 -> release/1.0.5

Şimdi yerel olarak referanslara da sahipsiniz, bu şubeyi ödünç alın (veya her neyse).

İş bitmiş!


1
Sen bir hayat kurtarıcısın :)
Chakri

# 2 aradığım şeydi. Teşekkürler!
Matthew

4

Kulağa önemsiz geliyor ama benim sorunum doğru projede olmamamdı. Olmayı beklediğiniz projede olduğunuzdan emin olun; aksi takdirde, doğru dalları aşağı çekemezsiniz.


Oooops! İyi bir!
Marc

2

Kaba kuvvet kullandım ve kumandayı çıkardım ve sonra ekledim

git remote rm <remote>
git remote add <url or ssh>

1

Sonunda benim için işe yarayan şey git fetch, aşağıdaki gibi komuta uzak depo adını eklemekti :

git fetch core

Şimdi hepsini şu şekilde görebilirsiniz:

git branch --all

0

Uzak şubeyi kontrol edebilirsiniz / n git getir && git checkout remotebranch

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.