Warum verwendet Git einen Doppelpunkt (:), um entfernte Branches zu löschen?

Lesezeit: 2 Minuten

Benutzer-Avatar
Kopfhaut

Warum verwendet Git

git push <remote> :<branch>

wie in

git push origin :featureA

den Zweig zu löschen featureA vom Remote-Server?

Mich interessiert, warum der Doppelpunkt als Löschkennzeichen verwendet wurde.

Es ist so anders als git branch -d <localbranch>.

Warum machen wir nicht so etwas wie

git branch -d --remote origin <branchname>

oder steckt hinter dem Doppelpunkt-Symbol eine tiefere Bedeutung, die ich nicht kannte?

Es ist nicht die Bedeutung von : an sich, sondern das, was davor vorhanden oder vielmehr abwesend ist.

Das Refspec-Format ist

<+><source>:<destination>

(optional + für nicht schnellen Vorlauf)

Also, wenn Sie so etwas tun git push origin :featureAgeben Sie eine leere Quellreferenz an und machen das Ziel im Grunde “leer” oder löschen es.

PS: Beachten Sie, dass die Refspec von : oder nichts bedeutet jedoch nicht, nichts zu nichts zu schieben. Es bringt Git dazu, “passende” Zweige zu pushen: Für jeden Zweig, der auf der lokalen Seite existiert, wird die entfernte Seite aktualisiert, wenn bereits ein gleichnamiger Zweig auf der entfernten Seite existiert.

  • Git >=1.7.0 hinzugefügt git push origin -d <branch> löschen und git push origin -D <branch> um das Löschen eines Remote-Zweigs zu erzwingen.

    – robsn

    10. Mai 2017 um 7:53 Uhr

  • Wann würdest du also etwas vor das 😕

    – ITIA

    12. Juli 2019 um 21:45 Uhr

  • @ITIA, wenn Ihre lokale Niederlassung einen anderen Namen hat als die entfernte.

    – Listerreg

    28. Februar 2020 um 15:30 Uhr

Benutzer-Avatar
Ryan Steward

Der Doppelpunkt ist kein “Lösch-Flag”. Beachten Sie, dass git push und git ziehen beide akzeptieren null oder mehr Refspecs als letzte Argumente. Jetzt Lesen Sie mehr über Referenzspezifikationen. Ein Doppelpunkt trennt Quelle und Ziel in einer Refspec. Der Befehl git push origin :foo hat eine leere Quelle und sagt im Wesentlichen “push nichts um den Ursprungs-Foo zu verzweigen”, oder mit anderen Worten, “den Ursprungs-Zweig foo nicht existieren zu lassen”.

  • IMO, Ihre Antwort beantwortet die Frage aus folgendem Grund nicht: Wenn ich versuche, einen Zweig zu drücken, dessen Verlauf abweichend ist, muss ich den Zweig erzwingen. Dies ist jedoch beim Löschen einer Verzweigung mit nicht der Fall :foo. Ein leerer Branch teilt den Verlauf nicht mit einem bestehenden Remote-Branch und kann daher, so wie ich es sehe, keinen bestehenden Remote-Branch mit einem leeren Branch überschreiben. Irgendetwas fühlt sich mit deiner Antwort falsch an.

    – Umang

    5. September 2011 um 4:02 Uhr

  • @Umang: Afaik, es ist nur eine konzeptionelle Sache, und ich habe nicht gesagt, “einen leeren Zweig drücken”. Ich sagte “nichts drücken”. Ich widerspreche Ihrer Einschätzung nicht, dass es mit einem “+” davor sinnvoller wäre, aber so funktioniert es eben. Siehe die letzter Abschnitt des Refspecs-Links, den ich gepostet habe, und entscheiden Sie, ob Sie dem Autor vertrauen.

    – Ryan Steward

    5. September 2011 um 4:06 Uhr


  • Ich glaube, ich verstehe es jetzt etwas besser. Vielen Dank!

    – Umang

    5. September 2011 um 4:27 Uhr

1012990cookie-checkWarum verwendet Git einen Doppelpunkt (:), um entfernte Branches zu löschen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy