Fetch in Git bekommt nicht alle Zweige

201

Ich habe ein Repository geklont, wonach jemand anderes einen neuen Zweig erstellt hat, an dem ich gerne arbeiten möchte. Ich habe das Handbuch gelesen und es scheint ganz einfach zu sein. Seltsamerweise funktioniert es nicht und alle Beiträge, die ich gefunden habe, deuten darauf hin, dass ich das Richtige tue. Also habe ich mich dem aussetzen werde zurechtweist, weil es muss mit diesem etwas offensichtlich falsch sein:

Die richtige Aktion scheint zu sein

git fetch
git branch -a
* master
  remotes/origin/HEAD --> origin/master
  remotes/origin/master
git checkout -b dev-gml origin/dev-gml

An diesem Punkt gibt es ein Problem, aus irgendeinem Grund, nachdem git fetchich den Remote-Zweig dev-gml nicht sehen kann. Warum nicht? Wenn ich das Repository frisch klone, ist es dort, also existiert mit Sicherheit der Remote-Zweig:

$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev-gml
  remotes/origin/master

Ich habe versucht git update, git pull, git fetch --all, git pretty-pleasein allen möglichen Permutationen ...

Edward Newell
quelle
44
Was git config --get remote.origin.fetchproduziert? Wenn nicht +refs/heads/*:refs/remotes/origin/*, sollte es wahrscheinlich sein.
Torek
yup das ist genau das, was es produziert
Edward Newell
3
Genau das gleiche Problem, aber der obige Kommentar hat es gelöst! Ich hatte +refs/heads/master:refs/remotes/origin/mastermit masterstatt*
Mirko
1
Das gleiche Problem für mich, aber keiner der Vorschläge auf dieser Seite löst es. Seltsam.
Magnus
1
@ thoni56: Ja, das liegt wahrscheinlich an einem flachen Klon.
Trần Việt Hoàng

Antworten:

383

Das Problem kann beim Überprüfen der remote.origin.fetchEinstellung festgestellt werden
(Die Zeilen, die mit beginnen, $sind Bash-Eingabeaufforderungen mit den von mir eingegebenen Befehlen. Die anderen Zeilen sind die resultierende Ausgabe).

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

Wie Sie sehen, wurde in meinem Fall die Fernbedienung so eingestellt, dass sie den Hauptzweig spezifisch und nur abruft. Ich habe es wie folgt behoben, einschließlich des zweiten Befehls zum Überprüfen der Ergebnisse.

$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

Der Platzhalter *bedeutet natürlich alles unter diesem Pfad.

Leider habe ich diesen Kommentar gesehen, nachdem ich ihn bereits durchgearbeitet und die Antwort durch Ausprobieren gefunden hatte.

AndASM
quelle
2
Dies sollte wahrscheinlich die akzeptierte Antwort sein, da das Problem im ursprünglichen Beitrag tatsächlich behoben wurde.
LocalPCGuy
1
Nur eine Randnotiz, ich musste den --replace-allParameter hinzufügen , um alle Werte in der Konfiguration für meineremote.origin.fetch
Garis M Suero
4
Beachten Sie, dass dies passieren kann, wenn Sie Ihr Repository nur mit einem einzigen Zweig geklont haben, z. B.git clone <url> --branch <branch> --single-branch [<folder>]
Narretz
2
Überprüfen Sie die Antwort von stux
Newbee
5
Dies könnte passieren, wenn Sie mitgit clone ... --depth 1
Anatolii Bivol
107

Ich hatte dieses Problem heute auf einem Repo.

Es war nicht das +refs/heads/*:refs/remotes/origin/*Problem gemäß der Top-Lösung.

Das Symptom war einfach das git fetch originoder git fetchschien einfach nichts zu tun, obwohl es entfernte Zweige gab, die abgerufen werden konnten.

Nachdem ich viele Dinge ausprobiert hatte, entfernte ich die Ursprungsfernbedienung und stellte sie neu her. Das scheint es behoben zu haben. Ich weiß nicht warum.

entfernen mit: git remote rm origin

und neu erstellen mit: git remote add origin <git uri>

stux
quelle
14
Ich hatte die richtige Git-Konfiguration für remote.origin.fetchdh +refs/heads/*:refs/remotes/origin/*. Die obige Lösung hat mir geholfen.
Newbee
9
Diese Lösung war auch für mich die richtige. Dies ist unglücklich, da es darauf hinweist, dass möglicherweise ein Fehler in Git vorliegt.
Robert Oschler
2
Dies löste auch mein Problem. Ich habe dieses Problem anscheinend auch auf einem Computer mit Git-Version 2.19.1v, aber auf einem anderen Computer mit Git-Version 2.17.1
Jerpint
6
git remote update originarbeitete für mich. Ich denke, etwas muss erfrischt werden?
Felipe Gerard
2
git remote update originhat bei mir nicht funktioniert, aber das Entfernen und Hinzufügen der Fernbedienung hat funktioniert.
Anatoliy Kmetyuk
57

Remote-Update

Du musst rennen

git remote update

oder

git remote update <remote> 

Anschließend können Sie git branch -rdie Remote-Zweige auflisten.

Kasse einer neuen Filiale

So verfolgen Sie einen (neuen) Remote-Zweig als lokalen Zweig:

git checkout -b <local branch> <remote>/<remote branch>

oder (manchmal funktioniert es nicht ohne das Extra remotes/):

git checkout -b <local branch> remotes/<remote>/<remote branch>

Hilfreiche Git Cheatsheets

philipvr
quelle
5
Mein Problem ist jedoch, dass ich einen vorhandenen Remote-Zweig nicht auschecken kann , da mein Git-Client nicht glaubt, dass er existiert. Siehe meine Frage. Beachten Sie, dass beim Ausführen git fetchgefolgt von git branch -anicht alle Zweige angezeigt werden. Ich musste mein Arbeitsverzeichnis löschen und neu klonen, um den Zweig zu sehen, den dev-gmlein Mitarbeiter erstellt hat. Diesmal hat es funktioniert, aber wir werden uns oft verzweigen!
Edward Newell
Hey @EdwardNewell, danke für die Antwort, nur um dich wissen zu lassen, dein Link cheat.errtheblog.com/s/git ist tot für mich ...
Kjellski
Es ist lange her, dass ich diese Frage zum ersten Mal gestellt habe, und ich wurde nur gepingt, weil jemand neu gepostet hat. Ich akzeptiere diese Antwort, obwohl ursprünglich nichts für mich funktioniert hat. Der Grund, warum ich dies endlich als richtig markiert habe, ist, dass ich vermute, dass das, was er daneben geschrieben hat, Edit:sehr gut funktioniert haben könnte. Es ist das, was ich versuchen würde, wenn ich immer noch vor dem Problem stünde. HTH
Edward Newell
Für die Aufzeichnung ist das bisschen, das mir hier geholfen hat, ist git remote update origin. Das machte den fehlenden Zweig über sichtbar git branch -l -r. (Ich habe es mir angesehen git config --get remote.origin.fetchund die Ausgabe war +refs/heads/*:refs/remotes/origin/*wie erwartet.)
Robert Dodier
9

Schreiben Sie es vom Terminal

git fetch --prune.

es funktioniert gut.

Samet ÖZTOPRAK
quelle
1
Danke dir! Ich habe viele Dinge ausprobiert und dachte, ich würde es einfach versuchen ... Nun, um
nachzuschlagen
Was tut es?
Adam Orlov
Es werden alle verfügbaren Filialen benötigt. Schau dir den Kopf an.
Samet ÖZTOPRAK
4

Um es genauer zu machen Erstellen Sie einen Verfolgungszweig. Dies bedeutet, dass Sie jetzt einen Remote-Zweig verfolgen.

git branch --track branch remote-branch
git branch --track exp remotes/origin/experimental

Danach kannst du

git branch   # to see the remote tracking branch "exp" created .

Dann arbeiten Sie an diesem Zweig

git checkout branchname
git checkout exp

Nachdem Sie Änderungen an der Verzweigung vorgenommen haben. Sie können Git-Abruf und Git-Zusammenführung mit Ihrem Remote-Tracking-Zweig durchführen, um Ihre Änderungen zusammenzuführen und wie unten beschrieben in den Remote-Zweig zu verschieben.

git fetch origin
git merge origin/experimental  
git push origin/experimental

Hoffe es hilft und gibt dir eine Idee, wie das funktioniert.

Swapna
quelle
1

Ich hatte ein ähnliches Problem, aber in meinem Fall konnte ich zum Remote-Zweig ziehen / drücken, aber git statusden lokalen Zweigstatus für den Remote-Zweig nicht anzeigen.

Auch in meinem Fall git config --get remote.origin.fetchhat nichts zurückgegeben

Das Problem ist, dass in der .git/configDatei in der Abrufzeile des jeweiligen Remote-Blocks ein Tippfehler aufgetreten ist . Wahrscheinlich etwas, das ich zuvor versehentlich hinzugefügt habe (manchmal schaue ich mir diese Datei direkt an oder bearbeite sie sogar)

Überprüfen Sie also, ob Ihr Remote-Eintrag in der .git/configDatei korrekt ist, z.

[remote "origin"]
    url = https://[server]/[user or organization]/[repo].git
    fetch = +refs/heads/*:refs/remotes/origin/*
Juh_
quelle
0

Dies kann auf einen Moment mit der Gesichtspalme zurückzuführen sein: Wenn Sie zwischen mehreren Klonen wechseln, finden Sie sich leicht im falschen Quellbaum wieder und versuchen, einen nicht vorhandenen Zweig zu ziehen. Es ist einfacher, wenn die Klone ähnliche Namen haben oder die Repos unterschiedliche Klone für dasselbe Projekt von jedem von mehreren Mitwirkenden sind. Ein neuer Git-Klon scheint dieses "Problem" offensichtlich zu lösen, wenn das eigentliche Problem darin besteht, den Fokus oder den Arbeitskontext oder beides zu verlieren.

Jerseyboy
quelle
0

Ich musste in meine GitExtensions Remote Repositories gehen, da hier nichts zu funktionieren schien. Dort sah ich, dass in 2 Filialen kein Remote-Repository konfiguriert war. Nach dem Einstellen sieht es wie folgt ausGeben Sie hier die Bildbeschreibung ein

Hinweiszweig noExternal3zeigt weiterhin an, dass kein Remote-Repository vorhanden ist. Ich bin mir nicht sicher, welche Kombination von Bash-Befehlen das gefunden oder angepasst hätte.

Maslow
quelle
0

Hatte heute das gleiche Problem beim Einrichten meines Repos von Grund auf neu. Ich habe alles versucht, nichts hat funktioniert, außer den Ursprung zu entfernen und ihn wieder hinzuzufügen.

git remote rm origin
git remote add origin [email protected]:web3coach/the-blockchain-bar-newsletter-edition.git

git fetch --all
// Ta daaa all branches fetched
Lukas Lukac
quelle
-1

Wir hatten das gleiche Problem und Sie müssen verwenden

git fetch

git push origin branch_name

git branch -r

Hoffe, dies hilft jemandem, der vor dem gleichen Problem steht

Chazefate
quelle