Ihre Konfiguration gibt an, dass mit dem <Zweignamen> von der Fernbedienung zusammengeführt werden soll, aber es wurde kein solcher Verweis abgerufen.

201

Ich erhalte diesen Fehler beim Ziehen:

Ihre Konfiguration gibt an, dass mit der Referenz 'refs / Heads / Feature / Sprint4 / ABC-123-Branch' von der Fernbedienung zusammengeführt werden soll, aber es wurde keine solche Referenz abgerufen.

Dieser Fehler tritt bei keinem anderen Zweig auf.
Das Besondere an diesem Zweig ist, dass er aus dem vorherigen Commit eines anderen Zweigs erstellt wurde.

Meine Konfigurationsdatei sieht folgendermaßen aus:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = <url here>
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "new-develop"]
    remote = origin
    merge = refs/heads/new-develop
[branch "feature/Sprint4/ABC-123-Branch"]
    remote = origin
    merge = refs/heads/feature/Sprint4/ABC-123-Branch
Farrukh Chishti
quelle
Können Sie den Befehl freigeben, mit dem Sie die Zusammenführung durchführen?
Dchayka
1
Dieses Problem kann auftreten, wenn der Remote-Zweig gelöscht wurde. Überprüfen Sie noch einmal, ob es wirklich da ist.
Benny Neugebauer
4
Zukünftige Leser: Wenn Sie wissen, dass der Remote-Zweig vorhanden ist, überprüfen Sie, ob Sie den Fall ignorieren oder nicht. Ich hatte einen lokalen Zweig eingerichtet, um einen Remote-Zweig zu verfolgen, aber den Namen der Fernbedienung in Kleinbuchstaben eingegeben. Musste nur local neu konfigurieren, um origin / BranchName anstelle von origin / branchname zu verfolgen
Jerreck
Ich hatte gerade diesen Fehler und das Problem war viel einfacher als die folgenden Antworten. Ich hatte meine VPN-Verbindung verloren. Dies ist also auch der Fehler, den Sie erhalten, wenn git nicht auf den Remote-Ursprungsserver zugreifen kann.
Ben Thurley
Mein Git-Server war ausgefallen. Das ist die Ursache.
Dellasavia

Antworten:

147

Was das bedeutet

Ihr Upstream - die von Ihnen angerufene Fernbedienung origin- hat oder hat möglicherweise nie mehr einen Zweig mit dem Namen (es ist unmöglich, allein anhand dieser Informationen zu erkennen) feature/Sprint4/ABC-123-Branch. Dafür gibt es einen besonders häufigen Grund: Jemand (wahrscheinlich nicht Sie oder Sie würden sich erinnern) hat den Zweig in diesem anderen Git-Repository gelöscht.

Was ist zu tun

Dies hängt davon ab, was Sie wollen . Siehe den Diskussionsteil unten. Sie können:

  • Erstellen Sie den Zweig auf der Fernbedienung oder erstellen Sie ihn neu
  • Löschen Sie Ihre lokale Niederlassung oder
  • alles andere, was Sie sich vorstellen können.

Diskussion

Sie müssen ausgeführt werden git pull(wenn Sie ausgeführt werden git merge, wird eine andere oder gar keine Fehlermeldung angezeigt).

Wenn Sie ausführen git fetch, kontaktiert Ihr Git einen anderen Git, basierend auf der urlZeile im [remote "origin"]Abschnitt Ihrer Konfiguration. Dieser Git führt einen Befehl ( upload-pack) aus, der Ihrem Git unter anderem eine Liste aller Zweige sendet . Sie können verwenden, um git ls-remotezu sehen, wie dies funktioniert (versuchen Sie es, es ist lehrreich). Hier ist ein Ausschnitt dessen, was ich bekomme, wenn ich dies auf einem Git-Repository für mich gitselbst ausführe :

$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f    HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b    refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f    refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1    refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6    refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638    refs/heads/todo
[snip]

In den refs/heads/Einträgen werden alle auf der Fernbedienung vorhandenen Zweige 1 zusammen mit den entsprechenden Festschreibungs-IDs aufgelistet (bei refs/tags/Einträgen können die IDs eher auf Tag-Objekte als auf Festschreibungen verweisen).

Ihr Git nimmt jeden dieser Zweignamen und ändert ihn entsprechend den fetchZeilen in demselben remoteAbschnitt. In diesem Fall Ihre Git ersetzt refs/heads/mastermit refs/remotes/origin/master, zum Beispiel. Ihr Git tut dies mit jedem Zweignamen, der auftaucht.

Es zeichnet auch die ursprünglichen Namen in der speziellen Datei auf FETCH_HEAD(Sie können diese Datei sehen, wenn Sie in Ihr eigenes .gitVerzeichnis schauen ). Diese Datei speichert die abgerufenen Namen und IDs.

Der git pullBefehl ist als praktische Abkürzung gedacht: Er wird git fetchauf der entsprechenden Fernbedienung ausgeführt und dann git merge(oder, wenn dies angewiesen ist git rebase) mit allen Argumenten, die zum Zusammenführen (oder erneuten Basieren) gemäß den Anweisungen des [branch ...]Abschnitts erforderlich sind . In diesem Fall [branch "feature/Sprint4/ABC-123-Branch"]sagt Ihr Abschnitt, dass Sie abrufen originund dann mit der ID zusammenführen sollen, die unter dem Namen gefunden wurde refs/heads/feature/Sprint4/ABC-123-Branch.

Da unter diesem Namen nichts gefunden wurde, git pullbeschwert sich und hört auf.

Wenn Sie dies als zwei separate Schritte ausführen git fetchund dann git merge(oder git rebase), würde Ihr Git Ihre zwischengespeicherten remotes/origin/Remote-Tracking-Zweige überprüfen, um festzustellen, mit was zusammengeführt oder neu aufgebaut werden soll. Wenn es war eine solche Verzweigung zu einer Zeit, haben Sie immer noch die Fernverfolgung Zweig. In diesem Fall erhalten Sie keine Fehlermeldung. Wenn es nie einen solchen Zweig gegeben hätte oder wenn Sie git fetchmit --prune(der tote Fernverfolgungszweige entfernt) gelaufen sind , so dass Sie keinen entsprechenden Fernverfolgungszweig haben, würden Sie eine Beschwerde erhalten, auf die origin/feature/Sprint4/ABC-123-Branchstattdessen verwiesen wird.

In beiden Fällen können wir den Schluss ziehen, dass feature/Sprint4/ABC-123-Branchdies auf der genannten Fernbedienung derzeit nicht vorhanden ist origin.

Es war wahrscheinlich einmal vorhanden, und Sie haben wahrscheinlich Ihren lokalen Zweig aus dem Remote-Tracking-Zweig erstellt. Wenn ja, haben Sie wahrscheinlich noch den Remote-Tracking-Zweig. Sie können untersuchen, wer den Zweig von der Fernbedienung entfernt hat und warum, oder Sie können einfach etwas drücken, um ihn neu zu erstellen, oder Ihre Fernverfolgungsniederlassung und / oder Ihre lokale Niederlassung löschen.


1 Nun, zumindest alles, was es zugeben wird. Aber wenn sie nicht ausdrücklich einige Refs versteckt haben, enthält die Liste alles.

torek
quelle
Vielen Dank, dass Sie erklärt haben, was der Befehl git pull tatsächlich tut. Ich konnte mein Problem beheben, indem ich git fetch ausführte und dann zusammenführte.
Fizch
11
Verwenden Siegit remote prune origin
Yoav
1
@ Ben-Uri: ja, oder, läuft git fetch --prune originoder Satz fetch.prunezu truein Ihrer Konfiguration (alle drei sollen die gleiche Sache zu tun, obwohl in einigen Versionen von Git diese einige nicht ganz zuverlässig waren).
Torek
1
Sie müssten git checkout <your remote branch>und alle gut sein (in einigen Fällen).
Alexander Shtang
2
@ JonathanBenn: Sie können verwenden git branch --set-upstream-to=origin/master master, um die Upstream-Einstellung für Ihre lokale zu ändern master. Das Löschen und Neuerstellen hat dies als Nebeneffekt (vorausgesetzt, Sie verwenden den DWIM-Stil git checkout master, um es zu erstellen), mit einem zusätzlichen Nebeneffekt, der dazu führt, dass Sie gezwungen werden master, mit Ihrem übereinzustimmen origin/master.
Torek
71

Dies kann auch passieren, wenn Sie / jemand den Zweig umbenannt hat. Befolgen Sie also diese Schritte (wenn Sie wissen, dass der Filialname umbenannt wurde). Nehmen Sie an, dass der frühere Filialname als wrong-branch-nameund jemand ihn in correct-branch-nameSo umbenannt hat .

git checkout correct-branch-name

git pull (Sie sehen dies "Ihre Konfiguration spezifiziert ..")

git branch --unset-upstream

git push --set-upstream origin correct-branch-name

git pull (Sie erhalten die frühere Nachricht nicht)

Extrem
quelle
1
Es ist nicht einmal notwendig git pushund es wird nicht funktionieren, wenn sich der aktuelle Zweig hinter seiner Fernbedienung befindet. git pull origin correct-branch-namereicht.
Pierre
1
Der Befehl zum Einrichten von Upstream ist oben falsch. Führen Sie einen Git-Pull nach der Operation --unset-upstream aus. In der Ausgabe des Pulls wird ein Fehler mit dem Befehl zum Festlegen des Upstreams wie unten angegeben angezeigt: git branch --set-upstream-to = origin / <branch > mybranch
Ankit Marothi
Funktionierte gut für mich, nachdem ich einige große Dateien aus meinem Repo entfernt hatte und musste zu einem neuen Repo zurückkehren, das ich gerade erstellt hatte
larrytech
40

Überprüfen Sie, ob Ihr Remote-Zweig zum Ziehen verfügbar ist. Ich hatte das gleiche Problem und stellte schließlich fest, dass der Remote-Zweig von jemandem gelöscht wurde.

Malhaar Punjabi
quelle
4
Bei mir war es genauso!
Aerin
3
Nach einer Pull-Anforderung hat die Zusammenführung (dh die Person, die die Zusammenführung durchgeführt hat) die Option, den Zweig zu löschen, der mit dem Zielzweig zusammengeführt wurde. Wenn Sie versuchen, an diesem Punkt zu ziehen, wird dieser Fehler angezeigt.
Artokun
das ist wahr :)
Malhaar Punjabi
7

Für mich war es ein Problem mit der Groß- und Kleinschreibung. Mein lokaler Zweig war Version_feature2 anstelle von Version_Feature2. Ich habe meinen Zweig mit dem richtigen Gehäuse erneut ausgecheckt und dann hat Git Pull funktioniert.

Nicko
quelle
2
Dies stellte sich auch als mein Problem heraus. Bei ziemlich langen / komplizierten Filialnamen ist dies nicht unbedingt offensichtlich.
Håkon K. Olafsen
6

Dieser Fehler kann auch auftreten, wenn der Name des Ursprungszweigs ein Fallproblem aufweist.

Beispiel: Ursprungszweig ist team1-Teamund der lokale Zweig wurde als ausgecheckt team1-team. Dann kann dies Tin -Teamund tin -teameinen solchen Fehler verursachen. Dies geschah in meinem Fall. Durch Ändern des lokalen Namens mit dem Namen des Ursprungszweigs wurde der Fehler behoben.

Akgupta
quelle
6

In meinem Fall fehlte mir einfach das anfängliche Commit für den Remote-Zweig, sodass der lokale Zweig nichts zum Abrufen fand und diese Fehlermeldung ausgab.

Ich tat:

git commit -m 'first commit' // on remote branch
git pull // on local branch
Nicola Gallazzi
quelle
4

Ich habe einen ähnlichen Fehler erhalten, als die eigentliche Ursache darin bestand, dass meine Festplatte voll war. Nachdem git pullich einige Dateien gelöscht hatte, begann ich wie erwartet zu arbeiten.

user1747134
quelle
4

Ich bin immer wieder auf dieses Problem gestoßen. In meinem Fall war @ Jerrecks Kommentar zu Fallunterschieden in den Filialnamen die Ursache für diesen Fehler. Einige Windows-Tools kennen die Groß- und Kleinschreibung nicht.

Führen Sie den folgenden Befehl aus, um die Groß- und Kleinschreibung in Git zu deaktivieren:

git config --global core.ignorecase true

Beachten Sie, dass dies mehr als nur Zweignamen betrifft. Wenn Sie beispielsweise "Foo.h" und "foo.h" im selben Verzeichnis haben (keine gute Idee beim Erstellen von Software für Windows), können Sie die Groß- und Kleinschreibung vermutlich nicht deaktivieren.

Stéphane
quelle
2

Überprüfen Sie einfach, ob jemand den Zweig auf der Fernbedienung gelöscht hat.

AB Abhi
quelle
1

In meinem Fall hatte ich den ursprünglichen Zweig gelöscht, von dem mein aktueller Zweig abgeleitet war. Also in der .git / config Datei hatte ich:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.0.5
    rebase = false

das simil2.0.5 wurde gelöscht. Ich habe es durch den gleichen Filialnamen ersetzt:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.1.12
    rebase = false

und es hat funktioniert

Guilherme Campos Hazan
quelle
1

Sie können Ihren lokalen Zweig einfach mit einem Remote-Zweig verbinden, indem Sie Folgendes ausführen:

git checkout <your-local-branch>
git branch --set-upstream-to=origin/<correct-remote-branch> <your-local-branch>
git pull
Gendos-ua
quelle
0

Für mich geschah dies, weil ich einen Zweigentwickler über die Weboberfläche mit dem Master zusammenführte und dann versuchte, ihn mit VSCode zu synchronisieren / zu ziehen, der auf dem Entwicklungszweig geöffnet war. (Es ist seltsam, dass ich ohne diesen Fehler nicht zum Master wechseln konnte.)

git pull
Your configuration specifies to merge with the ref 'refs/heads/dev'
from the remote, but no such ref was fetched.'

Es macht Sinn, dass es nicht refs / Heads / Dev findet - für mich war es einfacher, einfach den lokalen Ordner zu löschen und erneut zu klonen.

Dawit
quelle
0

Ich habe gerade genau diesen Fehler erhalten, als ich "git pull" gemacht habe, als meine Festplatte voll war. Hat etwas Platz geschaffen und alles hat wieder gut funktioniert.

user7550381
quelle
0

Sie können die ~/.gitconfigDatei in Ihrem Home-Ordner bearbeiten . Hier werden alle globalen Einstellungen gespeichert.

Oder verwenden Sie git config --global --unset-all remote.origin.urlund nach dem Ausführen git fetchmit der Repository-URL.

Angelo Mendes
quelle
0

Ich hatte das gleiche Problem, bei dem mein aktueller Zweig Entwickler war, und ich checkte zum MR-Zweig aus und machte danach Git Pull. Eine einfache Problemumgehung war, dass ich einen neuen Ordner für MR Branch erstellt und dort git pull gefolgt von git clone ausgeführt habe.

Im Grunde habe ich verschiedene Ordner gepflegt, um Code in verschiedene Zweige zu verschieben.

Monalisa Das
quelle
0

Ich habe gerade den gleichen Fehler erhalten, als ich nicht den richtigen Fall verwendet habe. Ich könnte 'Integration' auschecken. Git sagte mir, ich solle ein durchführen git pull, um meinen Zweig zu aktualisieren. Ich habe das getan, aber den genannten Fehler erhalten. Der korrekte Filialname lautet "Integration" mit einem Großbuchstaben "I". Als ich diesen Zweig auscheckte und zog, funktionierte es ohne Probleme.

emi-le
quelle
-2

Wenn ein anderer Pull nur funktioniert, bedeutet dies, dass Ihr Internet nicht verbunden war.

Pyrolistisch
quelle
Eine Reihe von Abstimmungen und doch war dies der Grund, warum ich diesen Fehler erhalten habe. Ich hatte Internet, aber das VPN an meinen Git-Server verloren. Nach dem erneuten Herstellen der Verbindung zum VPN funktionierte der Pull einwandfrei.
Ben Thurley