Die Remote-Verzweigung wird in "git branch -r" nicht angezeigt.

138

Ich habe auf ein entferntes Bitbucket-Repository verschoben, und kürzlich hat ein Kollege einen neuen Zweig, den er erstellt hat, in dasselbe Repository verschoben.

Ich versuche, die Änderungen abzurufen, die er hochgeladen hat.

 $ git branch -a
 * master
 localbranch1
 localbranch2
 remotes/origin/master

$ git branch -r origin / master

In der Web-Benutzeroberfläche für Bitbucket kann ich den Zweig sehen, den er erstellt hat. Wie kann ich das machen?

Nächster Versuch:

$ git fetch bitbucket
Password for 'https://[email protected]':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

Wenn der von ihm erstellte Zweig new_branch_b heißt, sollte ich dann Folgendes erwarten?

$ git branch -r
origin/master
origin/new_branch_b

Dritter Versuch:

$ git remote update
Fetching bitbucket
Password for 'https://[email protected]':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

$ git branch -r
  origin/master

Vierter Versuch:

[remote "bitbucket"]
url = https://[email protected]/user/repo.git

Ich habe bitbucketeher die Fernbedienung als den Ursprung angerufen (zumindest erinnere ich mich daran; ich habe sie vor einiger Zeit eingerichtet).

Fünfter Versuch:

Ich habe die Bitbucket-Remote-Konfiguration gemäß der Antwort von kan aktualisiert :

$ git config -e

[remote "bitbucket"]
    url = https://[email protected]/user/repo.git
    fetch = +refs/heads/*:refs/remotes/bitbucket/*

Für die meisten Menschen wird es Ursprung genannt:

[remote "origin"]
    url = https://[email protected]/user/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Danach,

$ git remote update

Fetching bitbucket
Password for 'https://[email protected]':
remote: Counting objects: 48, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 35 (delta 21), reused 0 (delta 0)
Unpacking objects: 100% (35/35), done.
From https://bitbucket.org/user/repo
 * [new branch]      branch_name1 -> origin/branch_name1
 * [new branch]      branch_name2    -> origin/branch_name2

.... und so weiter.

Ich denke git fetch originwürde auch funktionieren für git remote update.

Angstgal
quelle
1
Cool, aber vielleicht hatte es mehr Sinn, refs/remotes/bitbucket/*anstatt zu verwenden refs/remotes/origin/*.
Kan
Vielen Dank, gebührend zur Namenskonsistenz. Es ist wahrscheinlich sinnvoller, Bitbucket in Origin zu ändern! Convention und all das :)
Feargal
1
git fetch originmacht den Job
Gericht

Antworten:

107

Der remoteAbschnitt gibt auch Abrufregeln an. Sie können so etwas hinzufügen, um alle Zweige von der Fernbedienung abzurufen:

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

(Oder ersetzen origindurch bitbucket.)

Bitte lesen Sie hier darüber: 10.5 Git Internals - The Refspec

kan
quelle
3
Dies hat mein laufendes Verzweigungsproblem in Git behoben, das ich seit Wochen hatte. Plötzlich funktionierten alle Git-Remote-Updates. Vielen Dank!
PålOliver
2
Aus irgendeinem Grund sah es so aus: fetch = +refs/heads/master:refs/remotes/origin/masterfür mich. Das Ersetzen masterdurch hat *mein Problem behoben.
Sebastian Blask
2
Dies ist sehr nützlich, wenn Sie einen flachen Klon in einen nicht heiligen umgewandelt haben.
Warpzit
@kan Weißt du warum das manchmal passiert? Es passiert mir einfach bei git cloneeinem Projekt. Ich kann mich nicht erinnern, mit meinem lokalen Idioten etwas Besonderes gemacht zu haben.
dotnetCarpenter
@dotnetCarpenter Nicht sicher ... ist mir nie unerwartet passiert. Ist es möglich, dass clonedas unterbrochen und dann wieder aufgenommen wurde? Oder ist gleichzeitig etwas anderes auf Repo zugegriffen?
Kan
217

Aktualisieren Sie Ihre Fernbedienung, falls Sie dies noch nicht getan haben:

$ git remote update
$ git branch -r
Bruno
quelle
1
Ich verwende den GitHub-Client unter Win und manchmal werden die Remote-Zweige nicht aktualisiert. Die erste Zeile "Git Remote Update" funktioniert wie ein Zauber. Einfach und sauber
Stefano Buora
nachdem git remote updateich den neuen Zweig in der Benutzeroberfläche sehen kann. Danke
Tinkaal Gogoi
Es hat nicht geholfen.
dKab
Ich glaube, ich hatte den Zweig bereits erfolgreich abgerufen, musste ihn aber nur mit anzeigen git branch -r. Unter git-scm.com/docs/git-branch heißt es: "Option -r bewirkt, dass die Remote-Tracking-Zweige aufgelistet werden, und Option -a zeigt sowohl lokale als auch Remote-Zweige an." git remote updateruft alle Zweige aller in aufgelisteten Fernbedienungen ab git remote -v.
Rock Lee
Nachdem ich dies ausgeführt hatte, konnte ich laufen git checkout origin/masterund verzweigte mich dann von diesem abgetrennten Kopf zu meinem Hauptzweiggit branch master; git checkout master
Dfranc3373
34

Wenn Sie mit dem --depthParameter klonen , werden .git/confignicht alle Zweige abgerufen, sondern nur der Master.

Sie können den Parameter einfach weglassen oder die Konfigurationsdatei von aktualisieren

fetch = +refs/heads/master:refs/remotes/origin/master

zu

fetch = +refs/heads/*:refs/remotes/origin/*
DonPaulie
quelle
1
Vielen Dank! Ihre Antwort behebt das Problem tatsächlich leicht und scheint der richtige Weg zu sein, dies zu tun. Sie sollten jedoch hinzufügen, dass sich die Konfigurationsdatei in befindet .git/config, damit die Benutzer sie finden können.
dotnetCarpenter
19

Ich hatte das gleiche Problem. Es scheint die einfachste Lösung zu sein, einfach die Fernbedienung zu entfernen, sie zu lesen und abzurufen.

jessicah
quelle
1
Ich habe so viel Zeit damit verbracht, diese Antwort zu finden. Dies funktionierte ohne Probleme. Vielen Dank. :)
Kisanme
1
Hat auch für mich
funktioniert
1
git remote -vzeigt Ihnen Ihre Fernbedienungen, damit Sie die URL erhalten können, git remote rm originentfernt sie und git remote add origin <url>fügt sie erneut hinzu.
Siddhartha
Das hat bei mir funktioniert. Ich hatte ein Git-Submodul, das irgendwie keinen entfernten Zweig als Master abrief. Das Entfernen und erneute Hinzufügen löste es.
Zamrony P. Juhara
hat für mich gearbeitet, aber jetzt bekomme ich eine Warnungwarning: ignoring broken ref refs/remotes/origin/HEAD
dafnahaktana
7

Leider git branch -aund git branch -rsie nicht zeigen Sie alle Remote - Filialen, wenn Sie nicht ein „Git holen“ ausgeführt haben.

git remote show originarbeitet die ganze Zeit konsequent. Auch git show-refzeigt alle Referenzen im Git - Repository. Es funktioniert jedoch genauso wie der git branchBefehl.

Thushan
quelle