42 Stimmen

Wie kann man alle entfernten Git-Zweige löschen, die bereits integriert wurden?

Bei der Arbeit verwenden wir Themenzweige, die irgendwann in ein paar (3) Hauptzweige integriert werden. Nun würde ich gerne alle Themenzweige aus meinem remote Repositorys, die vollständig in einen Master-Zweig integriert worden sind. Wenn das nicht möglich ist, wäre es auch in Ordnung, eine Liste lokaler Zweige abzurufen, die integriert worden sind.

58voto

Michael Krelin - hacker Punkte 130575

Eine weitere Antwort, die von jemandem eingefügt wurde, der sie für die beste hielt (und sie sieht gut aus) :

git branch -r --merged origin/master | grep -v master | grep "origin/" | cut -d "/" -f 2- | xargs -n 20 git push --delete origin

Erläuterung:

  • git branch -r --merged origin/master
    • -r / --remotes die Zweige für die Fernverfolgung auflisten.
    • --merged origin/master nur die Zweige auflisten, deren Spitzen erreichbar sind von origin/master .
  • grep -v master jeden Zweignamen entfernen, der master von der Liste. 1 -v bedeutet negative Übereinstimmung.
  • grep "origin/" Wählen Sie nur Zweige auf origin entfernt.
  • cut -d "/" -f 2- die origin/ Präfix
  • xargs -n 20 git push --delete origin etwas Ähnliches tun wie git push --delete origin branch-a branch-b branch-c …
    • -n 20 / --max-args=20 maximal 20 Argumente pro Befehlszeile verwenden.

In Bezug auf -n Ich habe 20 nur als Beispiel gewählt. Weniger Argumente machen es langsamer, zum Beispiel -n 1 bewirkt, dass ein Zweig nach dem anderen gelöscht wird; Sie haben mehr Hinweise auf den Fortschritt, da jedes Mal, wenn ein Zweig gelöscht wird, ein Bericht erstellt wird. Mehr Argumente wie -n 200 wird es schneller (weniger Gesamtzeit), aber es meldet sich nur einmal alle 200 Verzweigungen, so dass man zunächst denkt, dass es eingefroren ist (was aber nicht der Fall ist). Passen Sie die Zahl an Ihre Bedürfnisse an. Wenn Sie diese Option weglassen, ist die Standardzahl sehr groß (2048 bei meinem Rechner).

1. Beachten Sie, dass dadurch auch die <code>origin/HEAD -> origin/master</code> aber Sie werden sich nicht mit <code>origin/HEAD</code> sowieso.

Ursprüngliche Antwort:

git push --delete remote topicbranch

ou

git push remote :topicbranch

Eine Liste von Zweigen zu geben, wäre etwas mit git branch --merged master

14voto

Adam Dymitruk Punkte 116211

Sie können dies in einem Arbeitsgang tun mit

git branch --merged master | grep -v master | xargs -n 1 git push --delete origin

Geben Sie das in ein Skript namens "clean" ein, wenn Sie dies häufig tun.

13voto

Nox73 Punkte 171

Wenn Sie entfernte Zweige aus dem Ursprungs-Repository löschen möchten:

git branch -r --merged develop | egrep -iv '(master|develop)' | sed 's/origin\///g' | xargs -n 1 git push --delete origin

3voto

Bashir Momen Punkte 1107

Nur für Powershell- und Windows-Benutzer.

    git branch -r --merged  | findstr /v "origin/master" | %{git push origin --delete $_.Trim().Substring(7)}

1voto

Arturo Herrero Punkte 12142

Dies sind die Befehle, die ich verwende, um alles zu entfernen und zusammenzuführen origin/master . Im Grunde genommen entferne ich alle Zweige, die in master von GitHub.

git remote update -p &&
git branch -r --merged origin/master |
grep origin |
grep -v master |
cut -d"/" -f2- |
xargs git push origin --delete

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X