Wie ‘git pull’ ohne Branches zu wechseln (git checkout)?
Lesezeit: 6 Minuten
Diana Saunders
Ich bin Laufen gewohnt git pull und andere Befehle aus einem Zweig, an dem ich arbeite. Aber ich habe einen Entwicklungsserver eingerichtet, an dem mehrere Leute arbeiten, also möchte ich dabei nicht die Zweige wechseln müssen.
Wenn ich einen bestehenden Zweig auf dem Dev-Server aus dem Github-Repository, das wir alle verwenden, aktualisieren möchte, was wäre der richtige Weg, dies zu tun?
Wenn ich den Befehl ausführe git pull github branchname zieht das einfach den Zweig in den aktuellen Zweig?
Alle Git-Beispiele, die ich finden kann, scheinen darauf hinzudeuten, dass Sie laufen checkout branchname Erst dann ziehen. Das versuche ich zu vermeiden. Wie gesagt, dies ist ein bestehender Zweig und ich möchte nur auf die neueste Version aktualisieren.
git fetch soll machen was du willst.
– Brad
17. September 2013 um 18:47 Uhr
git fetch würde die lokale Kopie des Remote-Zweigs aktualisieren, aber keinen lokalen Zweig, selbst wenn einer so eingerichtet ist, dass er diesen bestimmten Remote-Zweig verfolgt. Es kann das Gewünschte sein oder auch nicht. (Bearbeiten: Jedenfalls standardmäßig. Es ist möglich, es mit Argumenten aufzurufen, damit es sich anders verhält, aber in diesem Fall sollten die Argumente wirklich hervorgehoben werden.)
– Benutzer743382
17. September 2013 um 18:50 Uhr
Ich verstehe nicht ganz … verwendet jeder dasselbe lokale Repository auf dem Dev-Server? Wollen Sie deshalb nicht die Filiale wechseln? Warum lässt man nicht einfach jeden seinen eigenen privaten Klon erstellen, in dem man arbeiten kann? Siehe auch git: update a local branch without check it out?.
– Benutzer456814
18. September 2013 um 3:03 Uhr
Mögliches Duplikat von Merge, update, and pull Git branchs without using checkouts
– Michael Mrozek
15. April 2019 um 15:20 Uhr
Koralle
Ich habe nach demselben gesucht und schließlich die Antwort gefunden, die für mich in einem anderen Stackoverflow-Beitrag funktioniert hat: Merge, update, and pull Git branchs without using checkouts
Grundsätzlich:
git fetch <remote> <srcBranch>:<destBranch>
Beispiel:
git fetch origin branchname:branchname
Gibt es eine Möglichkeit, den Upstream-Zweig zu verwenden, anstatt den Quellzweig anzugeben?
– kambunt
22. November 2019 um 14:52 Uhr
Leider, aber die pull hat Parameter, die die fetch nicht: -s <strategy>, -Xsubtree=... was für mich von entscheidender Bedeutung war, daher ist dies kein gleichwertiger Ersatz. Ich hatte das hier beschriebene Problem: congruityservice.com/blog/… aber in meinem Fall wollte ich überhaupt keine Kasse.
– Andry
8. Dezember 2019 um 19:46 Uhr
Wenn man bedenkt, dass es bei der Frage um Pull geht, sollte die Antwort stattdessen lauten git pull <remote> <srcBranch>:<destBranch>.
– Murmeltier
12. Dezember 2019 um 20:46 Uhr
Wenn sich die Commits bereits in Ihrem lokalen Repository befinden: git fetch . origin/master:master
– Evan
24. April 2020 um 15:32 Uhr
Wenn Sie nur den (Origin|Online)-Zweig mit Ihrem lokalen Zweig zusammenführen möchten, können Sie verwenden git merge origin/master
– Abdel Rehman
11. Oktober 2021 um 6:36 Uhr
Ich hatte das gleiche Problem mit der Notwendigkeit, aktuelle Funktionsänderungen zu übernehmen oder zu verstauen, Checkout Meister verzweigen, tun pull Befehl erhalten Sie alles von remote zu lokal master Workspace, wechseln Sie dann erneut zu einem Feature-Branch und führen Sie a rebase um es mit dem Meister auf den neuesten Stand zu bringen.
Um dies alles zu erledigen, halten Sie den Arbeitsbereich im Feature-Zweig und vermeiden Sie das Umschalten. Ich mache Folgendes:
git fetch origin master:master
git rebase master
Und es macht den Trick gut.
Dies ist ein guter Rat, begräbt aber die Lede: gemäß den folgenden Antworten, wenn Sie eingeschaltet sind feature und ALLES, was Sie tun möchten, ist, Ihre lokale zu aktualisieren master im Einklang mit dem Ursprung sein, OHNE zu berühren featuremach einfach git fetch origin master:master… und es ist, als ob Sie stash-checkoutMaster-pull-checkoutFeature-stashPop gemacht hätten!
– Stadt
26. Juli 2019 um 16:25 Uhr
Um den Ursprungsmaster mit Ihrem lokalen Zweig zusammenzuführen, müssen Sie den lokalen Master nicht ziehen. Sie können verwenden git merge origin/master
– Dan
16. August 2019 um 11:32 Uhr
Ein Pull ist nur ein Abruf, gefolgt von einem Merge/Rebase, also sollten Sie in der Lage sein, dasselbe in einer Zeile zu tun: git pull origin main:main --rebase
– jor
15. Januar 2021 um 6:39 Uhr
Ich habe den folgenden Befehl verwendet, um den Ursprungszweig ohne Prüfung auf den lokalen Zweig zu aktualisieren. git holt den Ursprung [BranchName]:[BranchName]
Wenn du willst lokal Verzweigungsspitzen, um danach neu ausgerichtet zu werden git fetchbenötigen Sie einige zusätzliche Schritte.
Nehmen wir konkreter an, dass das Github-Repo Zweige hat D, B, CUnd master (Der Grund für diesen seltsamen Branch-Namen-Satz wird gleich klar). Sie sind auf Gastgeber devhost und Sie befinden sich in einem Repo, wo origin ist das Github-Repo. Sie machen git fetchdie alle Objekte und Aktualisierungen übernimmt origin/D, origin/B, origin/CUnd origin/master. So weit, ist es gut. Aber jetzt sagst du, du willst, dass etwas passiert, weiter devhostZu lokal Geäst D, B, Cund/oder master?
Ich habe diese offensichtlichen (zumindest für mich) Fragen:
Warum willst du die tipps von alle Niederlassungen aktualisiert?
Was ist, wenn ein Zweig (z. B. B) hat Commits, die dem entfernten (github) Repo fehlen? Sollen sie zusammengeführt, umbasiert oder … werden?
Was ist, wenn Sie in einem Zweig sind (z. B. C) und das Arbeitsverzeichnis und/oder der Index werden geändert, aber nicht festgeschrieben?
Was ist, wenn dem Remote-Repo neue Zweige hinzugefügt wurden (A) und/oder Filialen gelöscht (D)?
Wenn die Antwort auf (1) “weil devhost ist eigentlich nicht für die Entwicklung, sondern ein lokaler Spiegel, der einfach eine lokal verfügbare Kopie des Github-Repos aufbewahrt, damit alle unsere eigentlichen Entwickler schnell daraus lesen können, anstatt langsam von Github zu lesen”, dann möchten Sie einen “Spiegel”. anstatt eines “normalen” Repos. Es sollte kein Arbeitsverzeichnis haben und vielleicht auch keine Pushs akzeptieren, in diesem Fall verschwinden die verbleibenden Fragen einfach.
Wenn es eine andere Antwort gibt, wird (2-4) problematisch.
In jedem Fall ist hier eine Möglichkeit, lokale Refs basierend auf Remote-Refs zu aktualisieren (nach dem Ausführen von git fetch -p zum Beispiel):
for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
local=${ref#refs/remotes/origin/}
... code here ...
done
Was geht in die ... code here ... Abschnitt hängt von den Antworten auf die Fragen (2-4) ab.
Verwenden
git fetch
stattdessen. Es aktualisiert die Remote-Refs und -Objekte in Ihrem Repo, lässt aber die lokalen Branches, HEAD und den Worktree allein.
Aber das aktualisiert nicht die lokalen Zweige seines Entwicklungsservers … es aktualisiert nur die “Origin”-Zweige in diesem Git-Ordner, die dem Github-Repo des Fragestellers entsprechen.
– ANeves
3. Oktober 2017 um 10:52 Uhr
Oder, wenn Sie meine Version des Problems wollen: Ich möchte meinen Arbeitszweig mit “master” zusammenführen und nicht mit “origin/master of ssh://bla bla bla”. Durch Abrufen wird der Ursprung/Master aktualisiert, aber nicht der Master.
– ANeves
3. Oktober 2017 um 10:53 Uhr
Aber das aktualisiert nicht die lokalen Zweige seines Entwicklungsservers … es aktualisiert nur die “Origin”-Zweige in diesem Git-Ordner, die dem Github-Repo des Fragestellers entsprechen.
– ANeves
3. Oktober 2017 um 10:52 Uhr
Oder, wenn Sie meine Version des Problems wollen: Ich möchte meinen Arbeitszweig mit “master” zusammenführen und nicht mit “origin/master of ssh://bla bla bla”. Durch Abrufen wird der Ursprung/Master aktualisiert, aber nicht der Master.
– ANeves
3. Oktober 2017 um 10:53 Uhr
14462400cookie-checkWie ‘git pull’ ohne Branches zu wechseln (git checkout)?yes
git fetch
soll machen was du willst.– Brad
17. September 2013 um 18:47 Uhr
git fetch
würde die lokale Kopie des Remote-Zweigs aktualisieren, aber keinen lokalen Zweig, selbst wenn einer so eingerichtet ist, dass er diesen bestimmten Remote-Zweig verfolgt. Es kann das Gewünschte sein oder auch nicht. (Bearbeiten: Jedenfalls standardmäßig. Es ist möglich, es mit Argumenten aufzurufen, damit es sich anders verhält, aber in diesem Fall sollten die Argumente wirklich hervorgehoben werden.)– Benutzer743382
17. September 2013 um 18:50 Uhr
Ich verstehe nicht ganz … verwendet jeder dasselbe lokale Repository auf dem Dev-Server? Wollen Sie deshalb nicht die Filiale wechseln? Warum lässt man nicht einfach jeden seinen eigenen privaten Klon erstellen, in dem man arbeiten kann? Siehe auch git: update a local branch without check it out?.
– Benutzer456814
18. September 2013 um 3:03 Uhr
Mögliches Duplikat von Merge, update, and pull Git branchs without using checkouts
– Michael Mrozek
15. April 2019 um 15:20 Uhr