Git sagt, dass Remote Ref nicht existiert, wenn ich Remote Branch lösche

129

Ich rannte git branch -a

* master
  remotes/origin/test
  remotes/origin/master

Ich möchte meinen Remote-Zweig löschen

ich habe es versucht

git push origin --delete remotes/origin/test

ich habe

Fehler: 'Fernbedienungen / Ursprung / Test' kann nicht gelöscht werden: Remote-Referenz existiert nicht

Wie ist es nicht vorhanden?

Ich habe eine gemacht git branch -aund ich habe sie aufgelistet gesehen.

Habe ich etwas vergessen ?

cyber8200
quelle
1
git branch -alistet die Filialen in Ihrer Region und nicht von Ihrer Fernbedienung auf. Richtig?
Ich denke alle. Ich bin nicht sicher.
Cyber8200
2
Es werden die Remote-Zweige in Ihrer Region angezeigt. Es werden nicht alle Remote-Zweige aufgelistet.
1
@peterh Sieht für mich so aus, als würde es wirklich fragen: "Warum kann ich einen Remote-Zweig nicht löschen?" (wahrscheinlich, wenn der Zweig von der Remote gelöscht wurde, aber die Remote-Referenz lokal noch vorhanden ist) und daher kein Duplikat, könnte es aber vertragen ein klarerer Titel
Andrew Spencer
1
Ich habe den Titel bearbeitet und hoffe, dass dies näher an der Absicht der Frage liegt
Andrew Spencer

Antworten:

258

Der Befehl git branch -azeigt entfernte Zweige an, die in Ihrem lokalen Repository vorhanden sind . Dies mag etwas verwirrend klingen, aber um es zu verstehen, müssen Sie verstehen, dass es einen Unterschied zwischen einem Remote-Zweig und einem Zweig gibt, der in einem Remote-Repository vorhanden ist. Remote-Zweige sind lokale Zweige, die Zweigen des Remote-Repositorys zugeordnet sind. Die Gruppe der Remote-Zweige repräsentiert also den Status des Remote-Repositorys.

Die übliche Methode zum Aktualisieren der Liste der Remote-Zweige ist die Verwendung git fetch. Dadurch wird automatisch eine aktualisierte Liste der Zweige von der Fernbedienung abgerufen und Fernzweige im lokalen Repository eingerichtet. Außerdem werden alle fehlenden Festschreibungsobjekte abgerufen.

Entfernt git fetchjedoch standardmäßig keine Remote-Zweige, die keinen Gegenzweig mehr auf der Remote haben. Dazu müssen Sie die Liste der Remote-Zweige explizit beschneiden :

git fetch --prune

Dadurch werden Remote-Zweige, die auf der Remote nicht mehr vorhanden sind, automatisch entfernt. Anschließend git branch -rwird Ihnen eine aktualisierte Liste der Zweige angezeigt, die tatsächlich auf der Fernbedienung vorhanden sind: Und diejenigen, mit denen Sie löschen können git push.

Abgesehen davon müssen Sie zur Verwendung git push --deleteden Namen des Zweigs im Remote-Repository angeben. nicht der Name Ihrer Gegenstelle. Um den Zweig test(dargestellt durch Ihren Remote-Zweig origin/test) zu löschen , würden Sie verwenden git push origin --delete test.

Sack
quelle
Auch git branch -r | grep "origin"wird bei großen Projekten helfen, die Gabel verwenden
Seraf
Es gibt also zwei Gründe, um diese Nachricht von git zu erhalten: Entweder wurde der Zweig bereits auf dem Server gelöscht, oder Sie haben dem Zweignamen fälschlicherweise ein Präfix vorangestellt remotes/origin/. Oder beides.
Andrew Spencer
136

Die Bedeutung von remotes/origin/testist, dass Sie einen Zweig testauf dem Remote-Server haben origin. Der Befehl wäre also

git push origin --delete test
Drosam
quelle
25

Es gibt eine Verknüpfung zum Löschen des Zweigs im Ursprung:

git push origin :<branch_name>

Welches ist das gleiche wie zu tun git push origin --delete <branch_name>

Ricardo Magalhães
quelle
13
  1. Holen Sie sich die Liste der Remote-Filialen
git fetch # synchronize with the server
git branch --remote # list remote branches
  1. Sie sollten eine Liste der entfernten Zweige erhalten:
origin/HEAD -> origin/master
origin/develop
origin/master
origin/deleteme
  1. Jetzt können wir den Zweig löschen:
git push origin --delete deleteme
MovGP0
quelle
11

git push origin --delete yourBranch

Matheus Marsiglio
quelle
4

Da der Remote-Zweig Fernbedienungen / Ursprung / Test ist, können Sie zwei Möglichkeiten verwenden:

git push origin --delete test

und

git branch -D -r origin/test
Symeon Mattes
quelle
3

Ich folgte der Lösung durch Stoßen mit einer geringfügigen Anpassung am Ende. Meine Schritte folgen
- git fetch --prune;
- git branch -aFolgendes drucken
    master
    branch
    remotes/origin/HEAD -> origin/master
    remotes/origin/master
    remotes/origin/branch(Remote-Zweig zum Entfernen)
- git push origin --delete branch.
Hier wird der zu entfernende Zweig nicht als, remotes/origin/branchsondern einfach benannt branch. Und der Zweig wird entfernt.

Yanqi Huang
quelle
+1 für den Kommentar zu: dem Filialnamen, den ich löschen wollte, origin/branchwenn er nur sein sollte branch.
Ken
1

git branch -a listet die Zweige in Ihrem lokalen und nicht die Zweige in Ihrer Fernbedienung auf.

Und der Fehler error: unable to delete 'remotes/origin/test': remote ref does not existbedeutet, dass Sie in Ihrer Fernbedienung keinen Zweig mit diesem Namen haben, der Zweig jedoch in Ihrem lokalen Zweig vorhanden ist.


quelle
das ist hilfreich. es hat mein Löschproblem gelöst. Ich frage mich, warum 'Git Push - Löschen Ursprung / Test' nicht funktioniert hat, während "Git Push - Löschen Test" funktioniert hat
user10293779
1

Ein praktischer Einzeiler zum Löschen anderer Zweige als "Master" vom Ursprung:

git branch --remotes | grep -v 'origin/master' | sed "s/origin\///" | xargs -i{foo} git push origin --delete {foo}

Stellen Sie sicher, dass Sie die Auswirkungen dieser Ausführung verstehen, bevor Sie dies tun!

eddiewould
quelle
Danke für diesen Code! Dies ist der einzige Git-Code, den ich getestet habe, um alle Remote-Zweige außer Master zu löschen.
Alvin
1

Bei mir hat das funktioniert $ ▶ git branch -D -r origin / mybranch

Einzelheiten

$ ▶ git branch -a | grep mybranch fernbedienungen / herkunft / mybranch

$ ▶ git branch -r | grep mybranch origin / mybranch

$ ▶ Git Branch Development * Feature / Pre-Deployment

$ ▶ git push origin - mybranch-Fehler löschen: 'mybranch' kann nicht gelöscht werden: Remote-Ref existiert nicht Fehler: Einige Refs konnten nicht an '[email protected]: config / myrepo.git' gesendet werden.

$ ▶ git branch -D -r origin / mybranch Gelöschter remote branch origin / mybranch (war 62c7421).

$ ▶ git branch -a | grep mybranch

$ ▶ git branch -r | grep mybranch

Buggy B.
quelle
-1
git push origin --delete origin/test 

sollte auch funktionieren

Sajal Choukse
quelle
2
Es sollte Git Push Ursprung sein
Löschtest