Ich möchte alle Zweige löschen, die in der Ausgabe von ...
$ git branch
... aber den aktuellen Zweig in einem Schritt behalten . Ist das möglich? Wenn das so ist, wie?
git
git-branch
Sensorario
quelle
quelle
Antworten:
Basierend auf der Antwort von @pankijs habe ich zwei Git-Aliase erstellt:
Hinzufügen in
~/.gitconfig
Und wie @torek betonte:
Verwenden Sie die
-force
Version grundsätzlich niemals, wenn Sie nicht zu 300% sicher sind, dass Sie nichts Wichtiges verlieren. Weil es für immer verloren ist .quelle
git branch branchname commitid
löscht alle Zweige außer dem Master (ersetzen Sie den Master durch den Zweig, den Sie behalten möchten, aber dann wird der Master gelöscht)
quelle
grep -v ^*
.master-copy
, der zum Beispielgrep -v "^ *master$"
grep -v "master\|my-other-branch"
.zuerst (wechseln Sie zu dem Zweig, den Sie behalten möchten> ex : master ):
zweitens (stellen Sie sicher , dass Sie auf dem Master sind )
quelle
git branch -D $(git branch).Trim()
.git branch -d
(oder-D
) erlaubt mehrere Filialnamen, aber es ist etwas schwierig, automatisch "alle lokalen Filialen außer der, in der ich mich gerade befinde" anzugeben, ohne mindestens ein wenig Code zu schreiben.Die "beste" (formal korrekte) Methode besteht
git for-each-ref
darin, die Filialnamen abzurufen:Aber dann ist es noch schwieriger herauszufinden, auf welchem Zweig Sie sich befinden (
git symbolic-ref HEAD
ist die "formal korrekte" Methode dafür, wenn Sie ein ausgefallenes Skript schreiben möchten).Bequemer können Sie verwenden
git branch
, um Ihre lokalen Zweigstellennamen mit zwei Leerzeichen oder (für den aktuellen Zweig) mit einem Sternchen zu drucken*
. Führen Sie dies also durch, um die*
Version zu entfernen, und Sie erhalten durch Leerzeichen getrennte Zweignamen, die Sie dann an folgende Adresse übergeben könnengit branch -d
:oder:
Beachten Sie, dass Kleinbuchstaben
-d
einen "nicht vollständig zusammengeführten" Zweig nicht löschen (siehe Dokumentation). Mit using-D
werden solche Zweige gelöscht, auch wenn dadurch Commits "verloren" gehen. Verwenden Sie dies mit großer Sorgfalt, da dadurch auch die Zweig-Reflogs gelöscht werden, sodass das übliche "Wiederherstellen nach versehentlichem Löschen" ebenfalls nicht funktioniert.quelle
git branch -D $(git branch | grep -v '^*')
, wenn Sie die zusammengeführten Zweige löschen möchten.So entfernen Sie alle zusammengeführten Zweige (außer den aktuellen
-v ‘*’
):Ich habe auch einen solchen Befehl für die vollständige Bereinigung des Repos gemacht:
von hier genommen .
quelle
Löschen Sie alle Zweige außer einem bestimmten Zweig :
Löschen Sie alle lokalen Zweige außer Entwickeln und Mastern
quelle
Verwenden Sie für Windows in Powershell:
quelle
Löschen Sie alle zusammengeführten Zweige lokal:
Löschen Sie alle Zweige außer einem bestimmten Zweig :
Löschen Sie alle lokalen Zweige außer Entwickeln und Mastern
quelle
Ich habe dieses Konstrukt einmal für meine Windows-Umgebung erstellt. Vielleicht hilft es jemand anderem. Während der Ausführung werden der Master und der aktuelle Zweig nicht gelöscht . Alle anderen zusammengeführten Zweige werden trotzdem gelöscht.
quelle
So löschen Sie alle Zweige außer dem aktuellen Zweig in einem Schritt:
git branch | grep -v $(git rev-parse --abbrev-ref HEAD) | xargs git branch -D
quelle
Angenommen
git branch
, der aktuelle Zweig wird mit dem Präfix*
; Mit Powershell löscht der folgende Liner alle Zweige, die nicht mit beginnen*
.git branch | ? { $_ -lt "*" } | % { git branch -D $_.Trim() }
?
= Wo-Objekt%
= Foreach-Objektquelle
Daher sehe ich hier viele fest codierte Zweignamen ... Und ich denke, meine Antwort hier ist genauer auf den Teil der Frage "Aktueller Zweig", während sie einzeilig und lesbar bleibt, um Neulinge wie mich zu verprügeln. Nur um das Guthaben dort zu platzieren, wo es fällig ist, basiert die Antwort offensichtlich auch auf der Antwort von @ pankijs.
git branch | grep -v $(git branch --show-current) | xargs git branch -d
und ich habe es in einer Zeile in meinen .bash_aliases auch in debian aliased.
alias gitbclean='git branch | grep -v $(git branch --show-current) | xargs git branch -d'
(Obwohl ich denke, dass einige Bash-Funktionen aktiviert werden müssen, damit der Unterbefehl auf einigen Befehlszeilen ausgeführt werden kann)
quelle
Ich benutze dies, weil ich selektiver bin, was ich nicht löschen möchte. Mit dem folgenden Befehl werden alle Zweige außer Master, Develop und dem aktuellen Zweig entfernt.
Also habe ich das in meine
~/.zshrc
quelle
IMHO ist der sicherste Weg, um lokale Niederlassungen zu entfernen ,:
Weitere Informationen zu diesem Thema finden Sie unter Alle lokalen Git-Zweige löschen
quelle
gone
Marker zu drucken , sollten Sie ihn verwenden-vv
(zweimal ausführlich), während er-a
Ihnen nicht hilft (er listet auch entfernte Zweige auf)