Dieses Problem ist (noch) nicht gelöst, zumindest nicht einfach / ohne Skripting: siehe diese Stelle auf der Git-Mailingliste von Junio C Hamano, der die Situation erklärt und eine einfache Lösung vorschlägt.
Das Hauptargument ist, dass Sie das nicht brauchen sollten:
Mit Git, das nicht uralt ist (d.h. v1.5.0 oder neuer), gibt es keinen Grund für einen lokalen "dev" zu haben, der lediglich die entfernte Version verfolgt. Wenn Sie nur sehen wollen, können Sie den entfernten Tracking-Zweig direkt auschecken auf einem abgetrennten HEAD mit " git checkout origin/dev
".
Das bedeutet, dass die einzigen Fälle, in denen wir es für die Benutzer bequem machen müssen lokale Zweige zu handhaben, die entfernte Zweige "verfolgen", wenn Sie lokale Änderungen haben, oder wenn Sie planen, welche zu haben.
Wenn Sie lokale Änderungen auf "dev" haben, die so markiert sind, dass sie das Entfernen von "dev" zu verfolgen, und wenn Sie sich auf einem anderen Zweig als "dev" befinden, dann sollten wir nicht nach "" nichts tun. git fetch
" aktualisiert die Fernverfolgung "dev". Es wird sowieso nicht vorgespult
Die Forderung nach einer Lösung war eine Option oder ein externes Skript, um Pflaume lokale Zweige, die jetzt auf die ferngesteuerten Zweige folgen, anstatt sie durch schnelles Vorspulen auf dem neuesten Stand zu halten, wie es der ursprüngliche Poster gefordert hatte.
Wie wäre es also mit " git branch --prune --remote=<upstream>
", die über lokale Zweige durchläuft, und wenn
(1) es ist nicht der aktuelle Zweig; und
(2) es ist markiert, um einen Zweig aus dem <upstream> zu verfolgen; und
(3) es hat keine eigenen Commits;
dann diesen Zweig entfernen? " git remote --prune-local-forks <upstream>
" ist auch in Ordnung; es ist mir egal, welcher Befehl die Funktion implementiert viel.
Nota: Seit Git 2.10 gibt es keine solche Lösung mehr. Beachten Sie, dass die git remote prune
und den Unterbefehl git fetch --prune
geht es darum, den Zweig zu entfernen, der auf dem entfernten Rechner nicht mehr existiert, und nicht darum, den lokalen Zweig zu entfernen, der dem entfernten Zweig folgt (für den der entfernte Zweig der Upstream-Zweig ist).
9 Stimmen
Möchten Sie die automatische Aktualisierung der lokalen Verfolgungszweige nur im Schnelldurchlauf? Das sollten Sie, denn bei der Zusammenführung können Konflikte auftreten, die Sie lösen müssen...
45 Stimmen
Geht man von einem konservativen Betrag von 300 Dollar für die Beratungszeit aus, um damit herumzuspielen, so hat diese eine Ausgabe die Unternehmen 23.242.800 Dollar gekostet, wenn man von 77.476 Besuchern ausgeht. Betrachten Sie nun diese Frage stackoverflow.com/questions/179123/ und all die anderen. Wow.
0 Stimmen
Auch hier gibt es eine gute Antwort stackoverflow.com/a/10312587/1254718
29 Stimmen
@Luke Sie sind die erste Person, die ich höre, die darauf hinweist, dass die Zeit, die wir aufwenden, damit Git das tut, was wir wollen, Unternehmen Geld kostet. Diese einfachen Dinge sollten automatisch erfolgen und so einfach sein, dass ich keinen Browser öffnen muss, um die Foren zu lesen, IMO.
20 Stimmen
@LukePuplett Es gibt fast ~9 Mal so viele Fragen zu Git auf SO im Vergleich zu Mercurial, und die meisten davon scheinen zu sein "Wie mache ich <einfache Operation> in Git?". Das deutet darauf hin, dass Git entweder schlecht konzipiert, schlecht dokumentiert oder unintuitiv ist, oder alles drei.
38 Stimmen
@IanKemp Ich bin mir nicht sicher, ob es sicher ist, diese Behauptung aufzustellen, ohne die demografischen Daten von SO zu kennen. Wenn Mercurial hier nicht so häufig benutzt wird, oder wenn die Benutzer andere Foren benutzen, um darüber zu fragen, würde ich das gleiche Ergebnis erwarten. :) Es gibt ~51 mal so viele Fragen zu Javascript im Vergleich zu Assembly - also ist es vielleicht nicht immer genau, Werkzeuge nur anhand dieser Art von Metriken zu beurteilen.
5 Stimmen
Lol... Wieder ein Beispiel dafür, dass Git eine einfache Aufgabe schwierig macht.
1 Stimmen
Ich weiß, dass dies eine alte Frage ist, OP, aber würden Sie in Erwägung ziehen, die Antwort von John nicht zu akzeptieren und eine andere zu akzeptieren? Die akzeptierte Antwort stellt rechthaberische (und gemäß den Kommentaren potenziell schädliche) Behauptungen über pull versus rebase auf, die nichts mit der Frage zu tun haben, und sie empfiehlt die Verwendung eines Softwarepakets, das nicht mehr gepflegt wird und offenbar nur unter Linux funktioniert.
0 Stimmen
@KyleStrand danke für den Hinweis
git-up
wird nicht mehr gepflegt. Ich habe ihn viele Jahre lang gerne benutzt, aber jetzt nicht mehr. Irgendwie bin ich nicht mehr auf dieses alte Problem gestoßen. Was die anderen Antworten betrifft, so scheint keine gut genug zu sein, um sie zu akzeptieren. Haben Sie einen Favoriten?1 Stimmen
Ich denke, die von Jefromi ist am nützlichsten. Der springende Punkt ist, dass das Verhalten, alle lokalen Zweige zusammenzuführen, eine individuelle Überprüfung erfordert; jeder, der dieses Verhalten wünscht, sollte sich der Risiken bewusst sein, die mit der Automatisierung einer so umfangreichen Menge von Zusammenführungen verbunden sind. Die Entscheidung, ob es sich lohnt, die Automatisierung durchzuführen und wie die Automatisierung erfolgen soll (z. B. soll die Zusammenführung nur im Schnelldurchlauf erfolgen? Wie sollen Konflikte gehandhabt werden?), wird wahrscheinlich spezifisch für den jeweiligen Anwendungsfall sein.
3 Stimmen
Die beste Antwort, wenn Sie viele Zweigstellen haben:
rm -rf repo
danngit clone
2 Stimmen
@IanKemp Nach meiner persönlichen Erfahrung besteht ein großes Problem darin, dass die Leute sich nicht die Mühe machen, die Dokumentation zu lesen, bevor sie in die erste brenzlige Situation geraten. Ich bin mir nicht sicher, ob die tapferen Bemühungen, "Git für Dummies"-Tutorials (mit schöneren Namen) zu erstellen, in dieser Hinsicht eine Hilfe sind. Git ist im Grunde recht einfach: eine DAG von Revisionen und drei Bäume in einem Checkout. Die richtige Kombination von Befehlen und Optionen zu finden, um diese einfachen Strukturen zu manipulieren, ist no so einfach, leider - das ist, wo die
git help
Die -->Google-->SO-Pipeline kommt ins Spiel.