Git -Ferngepflont - zeigte nicht so viele beschnittene Zweige wie ich erwartet hatte
-
27-09-2019 - |
Frage
Aus der Mannseite:
Deletes all stale tracking branches under <name>. These stale branches have already been removed from the remote repository referenced by <name>, but are still locally available in "remotes/<name>".
Also habe ich ein paar Zweige verwendet
git push origin :staleStuff
und rannte dann
git remote prune origin
Es wurde jedoch nur eine einzige lokale Niederlassung beschnitten. Einige dieser Zweige wurden von mir geschaffen, andere von Mitarbeitern. Zeigt dies an, dass ich diese Zweige überhaupt nicht richtig verfolgt habe?
Lösung
Wenn Sie verwenden git push origin :staleStuff
, es entfernt automatisch origin/staleStuff
, Also, als du rannte git remote prune origin
, Sie haben einen Zweig beschnitten, der von jemand anderem entfernt wurde. Es ist wahrscheinlicher, dass Ihre Mitarbeiter jetzt laufen müssen git prune
Um Zweige loszuwerden, haben Sie entfernt.
Also was genau git remote prune
tut? Hauptidee: Lokale Zweige (nicht verfolgende Zweige) werden von nicht berührt von git remote prune
Befehl und sollte manuell entfernt werden.
Nun ein Beispiel für ein besseres Verständnis: ein reales Beispiel: Verständnis:
Sie haben ein Remote -Repository mit 2 Zweigen: master
und feature
. Nehmen wir an, Sie arbeiten an beiden Zweigen. Dadurch haben Sie diese Referenzen in Ihrem lokalen Repository (vollständige Referenznamen werden gegeben, um Verwirrung zu vermeiden):
refs/heads/master
(kurzer Namemaster
)refs/heads/feature
(kurzer Namefeature
)refs/remotes/origin/master
(kurzer Nameorigin/master
)refs/remotes/origin/feature
(kurzer Nameorigin/feature
)
Jetzt ein typisches Szenario:
- Einige andere Entwickler beenden alle Arbeiten an der
feature
, fusioniert es inmaster
und entferntfeature
Zweig vom Remote -Repository. - Standardmäßig, wenn Sie dies tun
git fetch
(odergit pull
)) Es werden keine Referenzen aus Ihrem lokalen Repository entfernt, sodass Sie noch alle 4 Referenzen haben. - Sie beschließen, sie aufzuräumen und zu rennen
git remote prune origin
. - git das erkennen
feature
Zweig existiert nicht mehrrefs/remotes/origin/feature
ist ein abgestanden Zweig, der entfernt werden sollte. - Jetzt haben Sie 3 Referenzen, einschließlich
refs/heads/feature
, Weilgit remote prune
Entfernt keinerefs/heads/*
Verweise.
Es ist möglich, lokale Zweige zu identifizieren, die mit Remote -Tracking -Zweigen verbunden sind, von branch.<branch_name>.merge
Konfigurationsparameter. Dieser Parameter ist nicht wirklich erforderlich, damit irgendetwas funktioniert (wahrscheinlich außer git pull
), also könnte es fehlen.
(Aktualisiert mit Beispiel- und nützlichen Informationen aus Kommentaren)