In unserem GitHub-Repository hat ein Mitarbeiter einen Zweig mit dem Namen entfernt release
. Aber wenn ich git checkout release
lokal laufe , bekomme ich immer den entfernten Zweig release
. Das Gleiche gilt, auch wenn ich einen anderen Zweig ausgecheckt, den release
Zweig mit gelöscht git branch -D release
und erneut ausgeführt habe git checkout release
.
Gibt es etwas im GitHub-Repository zu reparieren, oder soll ich etwas lokal reparieren?
git branch --remote
nach dem Ausführen ausgegebengit fetch
? Möglicherweise müssen Sie mit beschneidengit fetch -p
, um gelöschte Remote-Zweige zu vergessen.git branch --remote
Ausgabeorigin/release
. Wollen Siegit fetch -p
ohne zusätzliche Argumente ausführen und werden alle gelöschten Remote-Zweige entfernt?git fetch -p
ohne zusätzliche Argumente werden alle gelöschten Remote-Zweige entfernt.Antworten:
Nach dem Löschen eines Zweigs auf der Remote-Seite wird dieser zuvor abgerufene Zweig möglicherweise lokal angezeigt. Siehe:
Sie haben nur die "Freigabe" entfernt, nicht jedoch "Fernbedienungen / Herkunft / Freigabe". Löschen Sie es wie folgt:
Oder entfernen Sie alle abgerufenen Zweige, die auf der entfernten Seite nicht mehr existieren:
quelle
git branch -rd origin/release
, was heißt-r
das? Bedeutet-d
dasselbe wie-D
? Kanngit branch -rd origin/release
durch ersetzt werdengit branch -d remotes/origin/release
?List or delete (if used with -d) the remote-tracking branches.
; -D:Shortcut for --delete --force.
git branch -rd origin/release
durch ersetzt werdengit branch -d remotes/origin/release
?-r
bezieht sich nicht auf entfernte Zweige, es wird benötigt. Die lokalen und entfernten Zweige werden in verschiedenen Verzeichnissen gespeichert, vergleichenls -l .git/refs/heads
undls -l .git/refs/remotes
. Sie könnten auch eine lokale Zweigstelle haben ,remotes/origin/release
die ohne gelöscht werden würde-r
. Das mag verwirrend klingen, aber Sie könnten einfach herumspielen, Zweige mit seltsamen Namen erstellen und nachsehen, wie es aussieht.git/
.Wenn Zweige aus der Ferne gelöscht werden, müssen Sie Ihr lokales Repository bereinigen. Am einfachsten ist dies mit
Dadurch wird Ihr lokales Repository mit allen am Remote-Repository vorgenommenen Änderungen aktualisiert, ohne dass jedoch eine Ihrer lokalen Niederlassungen aktualisiert wird. Nachdem dies ausgeführt wurde,
zeigt den gelöschten entfernten Zweig nicht mehr an.
Git-Repositorys sind vollständig, egal ob auf Ihrem eigenen System oder auf dem Server. Wenn Sie also zum ersten Mal ein Repository klonen, erhalten Sie eine vollständige Kopie, und Ihr lokaler Git „kennt“ alle Remote-Zweige sowie Ihre lokalen Zweige. Diese Informationen werden nicht automatisch synchronisiert. Als Ihr Kollege den
release
Zweig auf dem Server löschte , verlor Ihr lokales Git-Repository nicht die Vorstellung eines entferntenrelease
Zweigs. Durch die Synchronisierung mit werdengit fetch
alle lokalen Informationen in Remotezweigen so aktualisiert, dass sie mit dem Status auf dem Server übereinstimmen (genau genommen, Remote-Repository, wo auch immer), ohne jedoch lokale Informationen in Remotezweigen zu löschen. Beim Bereinigen mitgit fetch -p
(odergit fetch --prune
odergit remote prune
) werden die lokalen Informationen zu entfernten Zweigen entfernt, die gelöscht wurden.quelle
-p
(--prune
) erzwingt dies.release
Zweig nicht gelöscht,git branch -D release
bevorgit checkout release
makegit checkout release
denrelease
Zweig nicht mehr abrief ?git checkout release
erstellt einen Zweig automatisch neu, wenn es einen entfernten Zweig mit diesem Namen gibt.git branch -D release
hat derrelease
Zweig in meinem lokalen Repository bereits gelöscht . In letzterem Fall hat ein Mitarbeiter denrelease
Zweig auf GitHub gelöscht . Ich bin mir also immer noch nicht sicher, warum "ein Zweig automatisch neu erstellt wird, wenn es einen entfernten Zweig mit diesem Namen gibt"?Tim: Git ist ein verteiltes VCS. Wenn Sie also ein Repo von Remote auf Ihr lokales klonen, klont es alles (Verlauf). Als Sie also Ihr Repo geklont haben, gab es einen Zweig namens release. Da Ihr Kollege die Freigabe-Verzweigung remote
git fetch -p
gelöscht hat, wird Ihre lokale Verzweigung diese Verzweigung haben , bis Sie eine Bereinigung vornehmen oder diese Verzweigung explizit löschen.quelle
Vielleicht ein bisschen tangential, aber die Perspektive dieser Site könnte helfen, das allgemeine Thema des Löschens von Zweigen zu verstehen:
http://railsware.com/blog/2014/08/11/git-housekeeping-tutorial-clean-up-outdated-branches-in-local-and-remote-repositories/
Es gibt Überschneidungen mit einigen der hier bereits besprochenen Themen, aber der Fokus liegt auf der Haushaltsführung: Löschen von Zweigstellen, die nicht mehr in einer kollaborativen Umgebung benötigt werden. Insbesondere
git branch --merged
identifiziert der Befehl Zweige, die sicher gelöscht werden können, weil sie mit Ihrer Hauptlinie (oder einem anderen Zweig, den Sie interessieren) zusammengeführt werden. Wenn Sie zusammenarbeiten, werden einige schicke Mini-Skripte wie dieses die Dinge in einem schönen, verdaulichen Format mit Datumsangaben und Autoren präsentieren.(Leider bezieht sich "nett, verdaulich" nicht auf die Formatierung der Skripte selbst.)
quelle