Git: Neuer Remote-Zweig kann nicht angezeigt werden

115

Ein Kollege hat einen neuen Remote-Zweig auf origin / dev / homepage verschoben, und ich kann ihn beim Ausführen nicht sehen:

$ git branch -r

Ich sehe immer noch bestehende Zweigstellen.

Ich gehe davon aus, dass dies daran liegt, dass meine lokalen Remote-Refs nicht auf dem neuesten Stand sind. Als ich einen Git-Pull ausführte, passierte nichts, da Git-Pull nur den aktuellen Arbeitszweig korrekt zieht. Im Gegensatz zu Git Push, der alle Zweige pusht, die Änderungen am entsprechenden Remote-Zweig haben?

hybrid9
quelle
Ein verwandtes Problem - Remote-Zweig kann nicht
angezeigt werden
1
schaffte es zu vergessen git pull, danke
JelenaČuklina
1
In meinem Fall git fetch <name-of-remote>hat der Trick getan. Ohne den Namen der Fernbedienung hat es NICHT funktioniert.
Menno Deij - van Rijswijk

Antworten:

162

Überprüfen Sie zunächst mithilfe des Befehls, ob der Zweig tatsächlich remote übertragen wurde git ls-remote origin. Wenn der neue Zweig in der Ausgabe angezeigt wird, geben Sie den folgenden Befehl ein git fetch: Er sollte die Zweigreferenzen aus dem Remote-Repository herunterladen.

Wenn Ihr Remote-Zweig immer noch nicht angezeigt wird, überprüfen Sie (in der ls-remoteAusgabe), wie der Zweigname auf der Remote lautet, und insbesondere, ob er mit beginnt refs/heads/. Dies liegt daran, dass der Wert von standardmäßig remote.<name>.fetchlautet:

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

so dass nur die Remote-Referenzen, deren Name mit beginnt refs/heads/, lokal als Remote-Tracking-Referenzen unter zugeordnet werden refs/remotes/origin/(dh sie werden zu Remote-Tracking-Zweigen)

Marco Leogrande
quelle
4
Ich konnte den neuen Remote-Zweig nach einem Git-Abruf-Ursprung sehen, bin mir aber nicht sicher, was der Unterschied ist, wenn ich nur einen Git-Abruf durchgeführt habe? Ich habe über Git Remote Update gelesen, war mir aber nicht sicher, was das getan hätte. Würde ich von nun an Git Fetch für neue Remote-Zweige ausführen müssen?
Hybrid9
1
@ hybrid9 Wenn Sie verwenden git fetch, lädt git die Referenzen aus dem Standard-Remote-Repository herunter, das in angegeben wurde .git/config: Normalerweise wird es aufgerufen origin, sodass beide Befehle gleichwertig sind, Ihre spezifische Konfiguration jedoch aus irgendeinem Grund unterschiedlich sein kann. Nein, Sie müssen nicht git fetchfür jeden Zweig angeben, da (standardmäßig) alle Zweige abgerufen werden .
Marco Leogrande
1
@ hybrid9 git pullentspricht git fetch+ git merge(oder git rebasewenn Sie die Standardeinstellungen geändert haben), sodass Sie die Verwendung git pullwie gewohnt fortsetzen können und die neuen Remote-Zweige von selbst angezeigt werden .
Marco Leogrande
1
Ich habe ursprünglich Git Pull ausgeführt, aber ich habe diesen neuen Remote-Zweig nie gesehen, der mich wirklich verwirrt hat. Nur bis ich git fetch origin lief. Ich schätze die Zeit bei der Beantwortung meiner Fragen.
Hybrid9
2
@hybrid Ich habe das gleiche Problem. git ls-remote gerritrepo:projectzeigt den neuen Remote-Zweig, git branch -aaber nicht ... Ich muss einen weiteren Klon erstellen und erst dann wird der neue Zweig angezeigt
Vikram
78

Überprüfen Sie, ob .git/configenthält

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

Wenn ja, ändern Sie es in sagen

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

Dann sollten Sie es verwenden können:

$ 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'
Jesse Glick
quelle
12
Dies geschah mir nach einem ersten flachen Klon.
ArkTekniK
Perfekt!!! Vielen Dank! Das ist mir passiert, als ich einen benutzerdefinierten Homebrew-Tipp mit dem Befehl installiert habe brew tap user/repo: Die lokale Kopie des von geklonten Repos brewhatte die von Ihnen genannten Einstellungen und es war nicht möglich, die anderen Zweige, die ich in meinem Repo hatte, zu sehen und zu verwenden. Danke noch einmal! :) +1!
rmbianchi
3
Der folgende Befehl kann verwendet werden, anstatt die .git / config- Datei manuell zu bearbeiten . git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"und dann git fetch originalle Zweige auf Ursprung zu bekommen .
dotnetCarpenter
das ist eine schöne!
Madz
47

Die einfachste Antwort lautet:

git fetch origin <branch_name>

Jacek Dziurdzikowski
quelle
2
Dies war buchstäblich das EINZIGE, was für mich funktioniert hat.
Theodore R. Smith
3
Es funktioniert nicht bei mir. Ich erhalte diesen Fehler:fatal: Couldn't find remote ref <branch_name>
Parisa Khateri
3
Ja, es hat auch bei mir funktioniert, nachdem dieser Git Checkout gut funktioniert hat !!
Whoami
30

Ein Git-Remote-Update durchführen wird auch die Liste der im Remote-Repository verfügbaren Zweige aktualisiert.

Wenn Sie TortoiseGit ab Version 1.8.3.0 verwenden, können Sie "Git -> Sync" ausführen. Unten links im angezeigten Fenster wird die Schaltfläche "Remote Update" angezeigt. Klicken Sie darauf. Dann sollten Sie in der Lage sein, "Git -> Switch / Checkout" auszuführen und den neuen Remote-Zweig in der Dropdown-Liste der von Ihnen ausgewählten Zweige anzuzeigen.

Metaforge
quelle
18
git remote updateist ein alter Weg, dies zu tun, ist der neuere bevorzugte Befehl git fetch.
In meiner Version von TortoiseGit (2.8.0.0) verfügt die Schaltfläche unten links über mehrere Optionen unter dem Pfeil und merkt sich, was Sie zuvor ausgewählt haben. Dies bedeutet, dass auf der Schaltfläche möglicherweise nicht "Remote Update" angezeigt wird. Wenn Sie es noch nicht benutzt haben, wird "Pull" angezeigt. Klicken Sie also auf den Pfeil und Sie sehen "Remote Update" in der Liste der Optionen.
Michael Hinds
11

Nehmen wir an, wir suchen Angenommen Release / 1.0.5

Wenn git fetch -allist nicht funktioniert und dass Sie nicht den Remote - Zweig sehen undgit branch -r nicht zeigt diese spezielle Branche.

1. Drucken Sie alle Refs von der Fernbedienung (Zweige, Tags, ...):

git ls-remote origin Sollte Ihnen den Remote-Zweig anzeigen, nach dem Sie suchen.

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

Der neue Zweig 'release / 1.0.5' erscheint in der Ausgabe.

2. Erzwingen Sie das Abrufen eines Remote-Zweigs:

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

Jetzt haben Sie auch die Refs lokal, Sie checken (oder was auch immer) diesen Zweig aus.

Job erledigt!

jpmottin
quelle
Du bist ein Lebensretter :)
Chakri
4

Es klingt trivial, aber mein Problem war, dass ich nicht im richtigen Projekt war. Stellen Sie sicher, dass Sie sich in dem Projekt befinden, in dem Sie sich voraussichtlich befinden. Andernfalls können Sie die richtigen Zweige nicht herunterziehen.

BlackHatSamurai
quelle
Ups! Gut!
Marc
2

Ich habe Brute Force angewendet, die Fernbedienung entfernt und dann hinzugefügt

git remote rm <remote>
git remote add <url or ssh>
Badeente
quelle
1

Was schließlich für mich funktionierte, war das Hinzufügen des Remote-Repository-Namens zum git fetchBefehl wie folgt:

git fetch core

Jetzt können Sie alle so sehen:

git branch --all
Serj Sagan
quelle
0

Sie können Remote Branch / n Git Fetch & Git Checkout Remotebranch auschecken

thao vu
quelle