Ich bin es gewohnt, git pull und andere Befehle innerhalb eines Zweigs auszuführen, 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 „git pull github branchname“ ausführe, zieht das einfach den Branch in den aktuellen Branch?
Alle Git-Beispiele, die ich finden kann, scheinen darauf hinzudeuten, dass Sie zuerst „checkout branchname“ ausführen und dann den Pull ausführen. 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 13 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 13 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 13 um 3:03 Uhr
Mögliches Duplikat von Merge, update, and pull Git branchs without using checkouts
– Michael Mrozek
15. April 19 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>
Gibt es eine Möglichkeit, den Upstream-Zweig zu verwenden, anstatt den Quellzweig anzugeben?
– kambunt
22. November 19 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 19 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>.
– J Waldmurmeltier
12. Dezember 19 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 21 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 feature, mach einfach git fetch origin master:master… und es ist, als ob Sie stash-checkoutMaster-pull-checkoutFeature-stashPop gemacht hätten!
– Stadt
26. Juli 19 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 19 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 21 um 6:39 Uhr
Wenn du willst lokal Verzweigungsspitzen, um danach neu ausgerichtet zu werden git fetch, benötigen Sie einige zusätzliche Schritte.
Nehmen wir konkreter an, dass das Github-Repo Zweige hat D, B, C, und 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 fetch, die alle Objekte und Aktualisierungen übernimmt origin/D, origin/B, origin/C, und origin/master. So weit, ist es gut. Aber jetzt sagst du, du willst, dass etwas passiert, weiter devhost, zu lokal Geäst D, B, C, und/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.
Benutzen
git fetch
stattdessen. Es aktualisiert die Remote-Refs und -Objekte in Ihrem Repo, lässt aber die lokalen Branches, HEAD und den Worktree allein.
git fetch
soll machen was du willst.– Brad
17. September 13 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 13 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 13 um 3:03 Uhr
Mögliches Duplikat von Merge, update, and pull Git branchs without using checkouts
– Michael Mrozek
15. April 19 um 15:20 Uhr