Git Remote-Zweig gelöscht, aber es erscheint immer noch in 'Zweig -a'

552

Angenommen, ich hatte einen Zweig mit dem Namen coolbranchin meinem Repository.

Jetzt habe ich beschlossen, es (sowohl remote als auch lokal) zu löschen mit:

git push origin :coolbranch
git branch -D coolbranch

Großartig! Jetzt ist der Zweig wirklich gelöscht.

Aber wenn ich renne

git branch -a

Ich bekomme immer noch:

remotes/origin/coolbranch

Zu beachten ist, dass beim Klonen eines neuen Repositorys alles in Ordnung ist und git branch -ader Zweig nicht angezeigt wird.

Ich möchte wissen, ob es eine Möglichkeit gibt, den Zweig aus der branch -aListe zu löschen, ohne eine neue Instanz zu klonen.

Yonix
quelle
58
Wenn Sie git fetch -p(oder git pull -p) dann werden entfernte Zweige beschnitten.
Yooy

Antworten:

688

git remote prune origin, wie in der anderen Antwort vorgeschlagen, werden alle diese veralteten Zweige entfernt. Das ist wahrscheinlich das, was Sie in den meisten Fällen möchten, aber wenn Sie nur diesen bestimmten Remote-Tracking-Zweig entfernen möchten, sollten Sie Folgendes tun:

git branch -d -r origin/coolbranch

(Das -rist leicht zu vergessen ...)

-rIn diesem Fall werden -ddie Remote-Tracking-Zweige aufgelistet oder gelöscht (falls verwendet ). Laut Git-Dokumentation hier: https://git-scm.com/docs/git-branch

Mark Longair
quelle
11
git remote prune originoder irgendeine Form des git fetch --pruneMarkierens hat in meinem Fall bei mir nicht funktioniert. ... aber git branch -d -r origin/feature/branch-namehat funktioniert. Ich bin mir nicht sicher, ob es etwas damit zu tun hat, dass es sich unter dem featureNamespace befindet (Git Flow), aber so ging es weiter, falls Googler feststellen, dass ihnen das passiert.
Misterparker
8
Gibt es einen Grund, warum dies notwendig ist? Es scheint wirklich schlecht, diese nicht vorhandenen Zweignamen in der Liste zu belassen und sie nicht automatisch zu bereinigen.
Akronymn
296

Versuchen:

git remote prune origin

Aus der Git-Remote-Dokumentation :

Pflaume

Löscht alle veralteten Remote-Tracking-Zweige unter <Name>. Diese veralteten Zweige wurden bereits aus dem Remote-Repository entfernt, auf das mit <Name> verwiesen wird, sind jedoch weiterhin lokal in "Remotes / <Name>" verfügbar.

Geben Sie mit der Option --dry-run an, welche Zweige beschnitten werden sollen, beschneiden Sie sie jedoch nicht.

Brian Phillips
quelle
1
Der Vollständigkeit halber : Es muss ähnlich sein wie git pull --pruneunter stackoverflow.com/a/17983126/94687 erwähnt. Und:git remote update --prune
imz - Ivan Zakharyaschev
230

Vergiss das Super nicht

git fetch -p

das holt und beschneidet alle Ursprünge.

orip
quelle
Der Vollständigkeit halber: es muss gleich sein git remote prune originund ähnlich wie git pull --prunebei erwähnten stackoverflow.com/a/6127884/94687 und stackoverflow.com/a/17983126/94687 sind. Und:git remote update --prune
imz - Ivan Zakharyaschev
2
Aber Zweige werden immer noch sichtbar sein, wenn Sie laufengit branch -a
Nikhil Sahu
1
@NikhilSahu: Ich sehe nicht mehr die entfernten Zweige, die mitgit branch -a
user276648
20

In unserem speziellen Fall verwenden wir Stash als unser Remote-Git-Repository. Wir haben alle vorherigen Antworten ausprobiert und nichts hat funktioniert. Am Ende mussten wir Folgendes tun:

git branch –D branch-name (delete from local)
git push origin :branch-name (delete from remote)

Wenn Benutzer Änderungen vornehmen wollten, mussten sie Folgendes tun:

git fetch -p
Shadowvail
quelle
git branch -d branch-namearbeitete für mich. Hinweis -Dan -d. In der Tat, als ich es mit Großbuchstaben D versuchte -D, erstellte es einen neuen Zweig mit dem Namen -D
RP-
1
Das "-D" ist eine Möglichkeit, das Löschen unabhängig von seinem Push- oder Merge-Status zu erzwingen. Seien Sie natürlich vorsichtig damit, aber in vielen Fällen war es notwendig.
Shadowvail
19

Verwenden:

git remote prune <remote>

Wo <remote>ist ein entfernter Quellenname wie Ursprung oder Upstream .

Beispiel: git remote prune origin

likaiguo.happy
quelle
3
für zukünftige Leser, hier ist der Unterschied zwischen git remote prune, git prune,git fetch --prune .
Emile Bergeron