Beim Löschen des Remote-Git-Zweigs "Fehler: Kein Push an nicht qualifiziertes Ziel"

139

Ich versuche einen Remote-Git-Zweig mit zu löschen

git push origin :my_remote_branch

und bekommen:

error: unable to push to unqualified destination: my_remote_branch
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to '[email protected]:/myrepo'

Das sind meine aktuellen Filialen

git branch -a
* develop
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/my_remote_branch

git branch -r --merged
  origin/HEAD -> origin/master
  origin/develop
  origin/master

Alle Ideen, wie ich diesen Zweig loswerden kann, wären willkommen.

Hugo
quelle
Haben Sie versucht git fetch, festzustellen, ob dieser nicht vorhandene Remote-Name behoben wurde? Haben Sie versucht, .git\refs\remotes\origindie my_remote_branchDatei zu löschen , um festzustellen, ob dies ausreicht?
VonC
tat, git fetchaber das half nicht. Versucht, nach einer einfacheren Lösung zu suchen, bevor Sie versuchen, die Datei manuell zu löschen.
Hugo
Versuchen Sie, diese Datei zu löschen oder zumindest zu verschieben: Sie enthält nur die SHA1 der Spitze dieses Zweigs.
VonC
45
Sie müssen tun git fetch -p, um veraltete Tracking-Zweige loszuwerden.
Jan Hudec

Antworten:

270

Die Tatsache, dass refs/remotes/origin/my_remote_branchin Ihrem lokalen Repository vorhanden ist, bedeutet nicht, dass refs/heads/my_remote_branches im originRemote-Repository vorhanden ist.

Tun git fetch -p originmachen refs/remotes/origin/my_remote_branchweggehen , wenn es bereits im Ursprung gelöscht wird . Die -pOption weist fetch an, alle Tracking-Zweige zu löschen, die in den entsprechenden Fernbedienungen nicht mehr vorhanden sind. Standardmäßig werden sie beibehalten.

Jan Hudec
quelle
12
git fetch -p originhabe es für mich behoben. Vielen Dank.
Redimp
1
Ihre Antwort ist großartig. Kurz und über das Wesentliche!
1.
Beschneiden hat nicht geholfen! während git push origin --delete origin/feature/xgab mir Fehler über Nichtexistenz ref git push origin :feature/xlöschte den Zweig. Ich denke also, ich git push origin --delete <branchName>sollte den Ursprung nicht in den branchName (?) Einschließen, aber es ist Bash-abgeschlossen, was verwirrend ist.
Bindestrich
@dashesy, du warst in einer anderen Situation als der ursprüngliche Fragesteller. In der ursprünglichen Frage besteht das Problem darin, dass der Remote-Zweig bereits gelöscht wurde , vermutlich von jemand anderem, sodass nur der lokale Zweig synchronisiert werden musste. Während Sie die Fernbedienung löschen. In der Tat sollte der Befehl lauten git push origin --delete feature/x, da Sie den Namen des Zweigs am Ursprung angeben und er dort kein Präfix hat (die beiden Formen sind ansonsten sowieso synonym).
Jan Hudec
@ JanHudec macht Sinn. Bash complete ist intelligent, wenn es verwendet wird, :um nicht einzuschließen, originaber es wird abgeschlossen, origin/branch_nameanstatt einfach, branch_namewenn die --deleteVariante verwendet wird.
Bindestrich
56

Es wurde eine Frage gefunden, mit der alte Remote-Git-Zweige aufgeräumt wurden, und dies hat den Trick getan

git branch -r -d origin/my_remote_branch
Hugo
quelle
Ich habe jetzt ungefähr eine Stunde lang versucht, genau das zu tun, vielen Dank!
Sebkkom
Dadurch wird der Remote-Zweig nicht gelöscht. Wenn Sie einen Git-Fetch machen, sehen Sie den Zweig wieder. Es wird einfach aus Ihrer lokalen Liste der Remote-Zweigstellen entfernt.
Patrick Desjardins
2
@PatrickDesjardins git push origin :my_remote_branchlöscht genau den Zweig von der Fernbedienung und git branch -r -d origin/my_remote_branchentfernt ihn von meiner lokalen Liste der entfernten Zweige
Hugo
11

Ich bin darauf gestoßen, als ich versucht habe, einen Remote-Zweig zu löschen, der bereits gelöscht wurde. Alles was benötigt wurde war eine Pflaume:

git remote prune origin
Matthew
quelle
4

Versuchen Sie, zwei Optionen zu befolgen, um den Remote-Zweig zwangsweise zu löschen

Option 1

get push origin --delete <branchName>

Option 2

git fetch -p origin
git branch -r -d origin/<branchName>
Pawan Maheshwari
quelle
3
git branch -r -d origin/my_remote_branch

war nicht genug für mich. Bevor ich zum Server gehen und direkt mit dem Git-Verzeichnis arbeiten musste (was gefährlich und hässlich ist), um den Zweig zu entfernen:

ssh mygitserver
su - git
cd /home/git/repositories/my_remote_branch.git/
git  --git-dir=. --work-tree=/tmp/ branch -D my_remote_branch
pevik
quelle
Es ist nicht nur gefährlich und hässlich, es ist auch falsch . Zum einen ist diese Frage über den Zweig lokal zu löschen , wenn es wurde an entfernten gelöscht. Zum anderen ist das Löschen eines Zweigs von der Fernbedienung nur eine Frage von git push origin :my_remote_branch. Kümmere dich um den Doppelpunkt.
Jan Hudec
Du hast recht, Jan, das git push origin :my_remote_branchist normal. Dieser hässliche und gefährliche Weg ist, wenn dies nicht funktioniert (z. B. aufgrund eines falsch konfigurierten Git).
Pevik
1

Ich habe das ähnliche Problem. Ich ging zuerst zu dieser Diskussion, konnte das Problem jedoch erst lösen, als ich https://stackoverflow.com/a/32147743/4209849 sah .

die einfach einen Tipp zur Unterscheidung hinzufügen origin/my-branch-nameundmy-branch-name .

Um genau zu sein, sollte ich verwenden:

git push origin :my_remote_branch

anstatt

git push origin :origin/my_remote_branch

Dies löste zumindest mein Problem, hoffe es würde auch anderen helfen.

Kangqiao Zhao
quelle
1

Für mich war das Problem, dass dies mein Standardzweig auf Github war. Ich habe den Standardzweig geändert, dann war der Löschvorgang erfolgreich.

Hoffe es hilft jemandem

Vlad Pulichev
quelle
0

Hatte das gleiche Problem, habe ich meine ./.git/configDatei manuell so bearbeitet, dass sie Folgendes enthält:

[branch "branchName"]
remote = origin
merge = refs/heads/branchName

Was dazu führte: error: src refspec branchName matches more than one.Dies habe ich durch Laufen behoben $git tag -d branchName. Danach konnte ich den neuen Zweig nach oben schieben.

Kaweesi Joseph
quelle
0

Das hat bei mir funktioniert: Ich habe den Remote-Zweig auf der Github-Benutzeroberfläche erstellt und dann meinen lokalen Zweig mit demselben Namen verschoben. Versuchen Sie es für den Fall, dass andere Möglichkeiten nicht funktionieren. Eine andere Möglichkeit wäre, lokal einen neuen Zweig zu erstellen und einen leeren Zweig zu verschieben und später Ihr Commit auszuwählen und erneut auf Ihre Fernbedienung zu übertragen.

Nutan
quelle