Zusamenfassend;
- Wie kann ich mehrere zusammengeführte Remote-Fernbedienungen löschen?
Mehr Hintergrund;
Ich habe ein Git-Repo mit Dutzenden von Fernbedienungen, die zu Master zusammengeführt wurden. Ich kann diese Fernbedienungen einzeln löschen, indem ich Folgendes verwende:
git push --delete origin myBranch-1234
Dies ist jedoch ein langsamer und langwieriger Prozess für alle Fernbedienungen. Also versuche ich diesen Befehl:
git branch -r --merged | grep origin | grep -v master | xargs git push origin --delete
git branch -r --merged
listet alle zusammengeführten Fernbedienungen auf.
grep origin
Weist den Befehl an, den Ursprung einzuschließen.
grep -v master
Weist den Befehl an, den Master auszuschließen.
xargs git push origin --delete
Weist den Befehl an, die Liste der Fernbedienungen zu löschen.
Alles in allem erwarte ich, dass alle zusammengeführten Fernbedienungen gesammelt und gelöscht werden.
Wenn ich den obigen Befehl ausführe, erhalte ich für jede zusammengeführte Fernbedienung Folgendes:
error: unable to delete 'origin/myBranch-1234': remote ref does not exist
error: unable to delete 'origin/myBranch-1235': remote ref does not exist
error: unable to delete 'origin/myBranch-1236': remote ref does not exist
error: unable to delete 'origin/myBranch-1237': remote ref does not exist
... etc
Diese Fernbedienungen existieren jedoch und ich kann jede von ihnen auschecken. Viele Websites und Leute empfehlen, dass ich laufe git fetch --prune
, um fehlende Referenzen zu bereinigen. Dies führt zu nichts, da alle diese Fernbedienungen vorhanden sind.
Also frage ich dich, lieber Stapeltausch;
- Warum kann ich eine Fernbedienung löschen, aber nicht viele?
- Ist mein Befehl korrekt?
Ich glaube, ich vermisse etwas Kleines. Jedes Mal, wenn ich dies recherchiere, scheint es, als würde ich das richtig machen, aber ich erhalte die oben genannten Fehler.
quelle
--prune
? Meiner Meinung nach ist das ziemlich irreführendorigin/
wie beschrieben falsch in den Filialnamen enthalten war / in anderen Antworten gelöst.Werden diese Zweige von der Fernbedienung (Ursprung) entfernt? Wenn ja, können Sie einfach tun
Andernfalls werden sie möglicherweise auch dann zurückgegeben, wenn Sie sie lokal löschen.
Update: Wenn Sie Ihren Befehl erneut betrachten, sieht es so aus, als würden Sie ihn falsch erstellen. Sie wollen wahrscheinlich
aber stattdessen machst du so etwas
quelle
git branch -r --merged
und dann versuche ich, sie mit zu löschenxargs git push origin --delete
. Der Befehl versucht, die Fernbedienungen zu löschen, außer dass er denkt, dassremote ref does not exist
.xargs
zu sehen, was tatsächlich ausgeführt wird.origin/
Präfix nicht in den Zweignamen einfügen. Git weiß bereits, dass Sie mit den Zweigen des Ursprungs arbeiten, seit Sie ausgeführt werdengit push origin
. Mykolas Vorschlag war, den letzten Teil des Befehls zu machenxargs echo
, anstattecho xargs [...]
.Verwenden Sie
sed
diese Option, um 'origin /' Teil zu entfernen und eine lttile zu ändernxargs
Teil zu .quelle