1366 Stimmen

Wie man lokale Tracking-Branches beschneidet, die nicht mehr auf dem Remote vorhanden sind?

Mit git remote prune origin kann ich die lokalen Zweige entfernen, die nicht mehr auf dem Remote-Server sind.

Aber ich möchte auch die lokalen Zweige entfernen, die von diesen Remote-Zweigen erstellt wurden (eine Überprüfung, ob sie nicht zusammengeführt wurden, wäre schön).

Wie kann ich das machen?

12 Stimmen

8 Stimmen

Einzeiler, plattformübergreifend, sieht nicht aus, als hätte die Katze auf deiner Tastatur geschlafen: npx git-removed-branches (Trockenlauf) oder npx git-removed-branches --prune (für echte Durchführung). Sie müssen bereits node.js installiert haben. Siehe Antworten unten für Details.

0 Stimmen

Normalerweise denke ich, dass diese Dinge absichtlich und nicht automatisch erledigt werden sollten, da man sich sonst öffnet, etwas zu löschen, was man nicht löschen wollte. Also würde ich beim git branch -d localBranchName und git push origin --delete remoteBranchName bleiben.

101voto

chris31389 Punkte 6910

Windows-Lösung

Für Microsoft Windows Powershell:

git checkout master; git remote update origin --prune; git branch -vv | Select-String -Pattern ": gone]" | % { $_.toString().Trim().Split(" ")[0]} | % {git branch -d $_}

Erklärung

git checkout master wechselt zum master-Zweig

git remote update origin --prune löscht entfernte Zweige

git branch -vv erhält eine ausführliche Ausgabe aller Zweige (git Referenz)

Select-String -Pattern ": gone]" erhält nur die Datensätze, bei denen sie von remote entfernt wurden.

% { $_.toString().Split(" ")[0]} erhält den Zweig Namen

% {git branch -d $_} löscht den Zweig

0 Stimmen

Schönes Beispiel. Alternativ verwenden Sie git remote prune origin, auch select-string scheint nicht mit der neuesten Version von git übereinzustimmen. Erwägen Sie die Verwendung von ConvertFrom-String -TemplateContent

4 Stimmen

Sieht so aus, als ob die neueste Version von git einige Leerstellen hinzufügt, sodass das Split nicht funktioniert, um den Branch-Namen zu erhalten. Machen Sie .toString().Trim().Split(" ") und es wird

0 Stimmen

Hier ist meiner: git checkout master; git pull; git remote prune origin; git branch --merged | select-string -notmatch "master" | % { $_.toString().Trim().Split(" ")[0]} | % {git branch -d $_}

73voto

wedesoft Punkte 2463

Man kann Git so konfigurieren, dass automatisch Verweise auf gelöschte Remote-Zweige entfernt werden beim Abrufen:

git config --global fetch.prune true

Wenn man anschließend git fetch oder git pull aufruft, werden Verweise auf gelöschte Remote-Zweige automatisch entfernt.

19 Stimmen

Dies entfernt keine lokalen branches, sondern nur Verweise darauf, oder?

0 Stimmen

@ClintEastwood Es löscht nur Verweise auf remoted branches. Sie können Verweise auf remoted branches auflisten, indem Sie git branch -r verwenden.

61voto

johnshew Punkte 589

Wie @tzacks bemerkt... gibt es ein npm-Paket, das dafür praktisch ist. Einfach:

npx git-removed-branches --prune

(Ich hätte kommentiert, aber nicht genug Reputation)

3 Stimmen

Wunderschön. Kein Aufwand überhaupt. Freut mich, dass dies eine vollständige Antwort war!

4 Stimmen

Dies sollte oben sein. Funktioniert auch in Windows.

2 Stimmen

Keine Probleme! Es wäre oben, wenn es nicht npx erfordern würde

54voto

027 Punkte 1433

Es werden die lokalen Zweige aufgelistet, deren entfernter Nachverfolgungszweig vom entfernten Server gelöscht wurde

$ git remote prune origin --dry-run

Wenn Sie die lokalen Zweige löschen möchten, die nicht verfolgt werden

$ git remote prune origin

27 Stimmen

Dies beantwortet die Frage nicht, dies ist es, was der OP bereits wusste.

6 Stimmen

Ich stimme auch zu, aber wenn Sie nach "Wie man lokale Tracking-Zweige beschneidet, die auf dem Remote nicht mehr vorhanden sind" suchen, ist dies der oberste Link, und diese Antwort passt zum Titel (nicht, wenn man die vollständige Beschreibung in der Frage gelesen hat), das ist der Grund für Upvotes:)

0 Stimmen

Dies entfernt die lokalen Branches nicht. Sie sind immer noch vorhanden, nachdem dies ausgeführt wurde.

24voto

Gnat Punkte 2751

Wenn Sie Windows und Powershell verwenden, können Sie Folgendes verwenden, um alle lokalen Branches zu löschen, die in den gerade ausgecheckten Branch gemerged wurden:

git branch --merged | ? {$_[0] -ne '*'} | % {$_.trim()} | % {git branch -d $_}

Erklärung

  • Listet den aktuellen Branch und die Branches auf, die damit gemerged wurden
  • Filtert den aktuellen Branch heraus
  • Entfernt führende oder abschließende Leerzeichen aus der git-Ausgabe für jeden verbleibenden Branch-Namen
  • Löscht die gemergten lokalen Branches

Es lohnt sich, zuerst git branch --merged alleine auszuführen, um sicherzustellen, dass nur das entfernt wird, was Sie erwarten.

(Portiert/automatisiert von http://railsware.com/blog/2014/08/11/git-housekeeping-tutorial-clean-up-outdated-branches-in-local-and-remote-repositories/.)

0 Stimmen

Dies löscht alle zusammengeführten Branches gegenüber nur denjenigen, die als gelöscht markiert sind, in der Ferne. Dies kann unerwünscht sein, wenn Sie Umgebungs- oder Release-Branches haben, die zusammengeführt wurden, aber die wir behalten möchten (wie uat prod usw.).

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