Ich bin es gewohnt, Git Pull und andere Befehle in einem Zweig auszuführen, an dem ich arbeite. Ich habe jedoch einen Entwicklungsserver eingerichtet, an dem mehrere Personen arbeiten, sodass ich dabei nicht zwischen Zweigen wechseln muss. Wenn ich einen vorhandenen Zweig auf dem Dev-Server aus dem von uns allen verwendeten Github-Repository aktualisieren möchte, wie wäre das der richtige Weg? Wenn ich den Befehl 'git pull github branchname' ausführe, wird der Zweig dann einfach in den aktuellen Zweig gezogen?
Alle Git-Beispiele, die ich finden kann, scheinen darauf hinzudeuten, dass Sie zuerst 'checkout branchname' ausführen und dann den Pull ausführen. Ich versuche das zu vermeiden. Wie gesagt, dies ist ein bestehender Zweig und ich möchte nur auf die neueste Version aktualisieren.
git fetch
sollte tun was du willst.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 sein oder auch nicht, was gewünscht wird. (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.)Antworten:
Ich suchte nach der gleichen Sache und fand schließlich die Antwort, die für mich in einem anderen Stackoverflow-Beitrag funktionierte: Zusammenführen, Aktualisieren und Ziehen von Git-Zweigen ohne Verwendung von Kassen
Grundsätzlich:
git fetch <remote> <srcBranch>:<destBranch>
quelle
pull
hat Parameter , dass dasfetch
nicht:-s <strategy>
,-Xsubtree=...
was für mich ein wichtiger war, so dass dies nicht ein äquivalenter Ersatz ist. Ich hatte das hier beschriebene Problem: congruityservice.com/blog/…, aber in meinem Fall wollte ich überhaupt keine Kasse.git pull <remote> <srcBranch>:<destBranch>
.git fetch . origin/master:master
Ich hatte das gleiche Problem mit der Notwendigkeit zu begehen oder zu aktuellen Funktionsänderungen, Kasse bunkert Master Zweig, tut
pull
Befehl alles tun , um aus der Ferne zu lokalemmaster
Arbeitsplatz, wechseln Sie dann wieder zu einem Feature - Zweig und führen Sie ein ,rebase
um es up-to-date mit Meister.Um dies alles zu erledigen, lassen 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.
quelle
feature
und alles, was Sie tun möchten, ist, Ihren lokalen Standort somaster
zu aktualisieren , dass er mit dem Ursprung übereinstimmt, ohne ihn zu berührenfeature
, tungit fetch origin master:master
Sie es einfach ... und es ist, als ob Sie es getan hätten stash-checkoutMaster-pull-checkoutFeature-stashPop!git merge origin/master
Wenn Sie möchten, dass die Tipps für den lokalen Zweig nachher erneut angezeigt werden
git fetch
, benötigen Sie einige zusätzliche Schritte.Genauer gesagt, nähme die GitHub Repo - Filialen hat
D
,B
,C
, undmaster
(der Grund für dieses ungeradee Zweig-name-Set wird in einem Moment klar sein). Sie sind auf Hostdevhost
und Sie sind in einem Repo, woorigin
ist das Github-Repo. Sie tungit fetch
, was über alle Objekte und Updates bringtorigin/D
,origin/B
,origin/C
, undorigin/master
. So weit, ist es gut. Aber jetzt sagen Sie Ihnen etwas passieren soll, aufdevhost
, um lokale NiederlassungenD
,B
,C
und / odermaster
?Ich habe diese offensichtlichen (für mich jedenfalls) Fragen:
B
) Commits hat, die dem Remote-Repo (Github) fehlen? Sollten sie zusammengeführt, neu gegründet oder ...?C
) und das Arbeitsverzeichnis und / oder der Index geändert, aber nicht festgeschrieben wurden?A
) und / oder Zweige gelöscht (D
) wurden?Wenn die Antwort auf (1) lautet "weil
devhost
nicht für die Entwicklung, sondern für einen lokalen Spiegel, der einfach eine lokal verfügbare Kopie des Github-Repos aufbewahrt, damit alle unsere tatsächlichen Entwickler schnell daraus lesen können, anstatt langsam daraus zu lesen." github ", dann willst du eher einen" Spiegel "als ein" normales "Repo. Es sollte kein Arbeitsverzeichnis haben, und vielleicht sollte es 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 gibt es eine Möglichkeit, die Aktualisierung lokaler Refs basierend auf Remote-Refs (
git fetch -p
z. B. nach dem Ausführen ) zu aktualisieren :Was in diesem
... code here ...
Abschnitt steht, hängt von den Antworten auf die Fragen ab (2-4).quelle
Verwenden
stattdessen. Es aktualisiert die Remote-Refs und -Objekte in Ihrem Repo, lässt jedoch die lokalen Zweige, HEAD und den Arbeitsbaum in Ruhe.
quelle
BEARBEITEN: Verwenden Sie 'git pull'. Es werden alle Zweige aus dem Repo abgerufen und auch auf den neuesten Stand aktualisiert, wenn der Zweig auf dem lokalen System nur für den aktuellen Zweig beendet wird. Hinweis: Git Pull entspricht Fetch + Merge, bei dem alle Zweige abgerufen werden, jedoch nur der aktuelle Zweig.
quelle
pull
führt einen Abruf durch (der ja alles von der Fernbedienung abruft), führt dann aber nur den aktuellen Zweig zusammen.