Wenn Sie git pull
auf dem master
Zweig laufen , wird er normalerweise von gezogen origin/master
. Ich bin in einem anderen Zweig namens newbranch
, aber ich muss einen Befehl ausführen, der ein git pull
von origin/master
in aus ausführt, master
aber ich kann nicht ausgeführt werden git checkout
, um den ausgewählten Zweig zu ändern, bis der Pull abgeschlossen ist. Gibt es eine Möglichkeit, dies zu tun?
Um Hintergrundinformationen zu geben, speichert das Repository eine Website. Ich habe einige Änderungen vorgenommen newbranch
und sie bereitgestellt, indem ich auf die Website umgestellt habe newbranch
. Jetzt, da diese Änderungen vorgelagert in der master
Filiale zusammengeführt wurden, versuche ich, die Website auch wieder in die master
Filiale zu verschieben. An diesem Punkt, newbranch
und origin/master
sind identisch, aber master
Rückstand origin/master
und aktualisiert werden muss. Das Problem ist, wenn ich es auf traditionelle Weise mache:
$ git checkout master
# Uh oh, production website has now reverted back to old version in master
$ git pull
# Website is now up to date again
Ich muss dasselbe wie oben ( git checkout master && git pull
) erreichen, ohne jedoch das Arbeitsverzeichnis während des Prozesses auf eine frühere Version zu ändern.
quelle
newbranch
und es nichts zu verstauen gibt!git fetch; git merge origin/master
von innen heraus tutnewbranch
. Das Klonen einer gesamten zweiten Kopie des Repositorys hat keinen Vorteil.Antworten:
Sie haben einen Arbeitsbaum, den Sie nicht berühren möchten, verwenden Sie also einen anderen. Klon ist billig, es ist dafür gebaut.
Das Problem mit all den anderen Antworten hier ist, dass sie nicht wirklich ziehen. Wenn Sie die Zusammenführung oder Neubasis benötigen, für die Sie Pull eingerichtet haben, benötigen Sie einen anderen Arbeitsbaum und das oben beschriebene Verfahren. Sonst reicht es einfach
git fetch; git checkout -B master origin/master
.quelle
git checkout master
Sie den altenmaster
Zweig auschecken, da Siegit pull
immain
Ordner keine vorgenommen haben , um ihn mit origin / master zu synchronisieren. Das versuche ich zu vermeiden.master
zurück zuorigin
, aber ich glaube nicht, dass Ihre endgültige Kaufabwicklung von dieser Aktualisierung istmaster
. Es gibt keinegit pull
Möglichkeit, denmaster
Zweig immain
Verzeichnis zu aktualisieren. Wenn mir also nichts fehlt, unterscheiden sich Ihre Befehle nicht davon, einfachgit checkout master
alleine zu laufen und den altenmaster
Baum abzurufen. Wenn Sie genau hinschauen, führen Sie keine Befehle in demmain
Verzeichnis aus, die Upstream kommunizieren (abgesehen von Zeile 1, die ausgeführt wird, bevor Sie Änderungen am Upstream-Repo vorgenommen haben.)Unkompliziert: Aktualisierung von einem Remote-Zweig in einen derzeit nicht ausgecheckten Zweig- Master :
Wobei der Ursprung Ihre Fernbedienung ist und Sie derzeit in einem Zweig ausgecheckt sind, z . B. dev .
Wenn Sie Ihren aktuellen Zweig zusätzlich zum angegebenen Zweig auf einmal aktualisieren möchten:
quelle
Dies wird hier beantwortet: Zusammenführen, Aktualisieren und Ziehen von Git-Zweigen ohne Verwendung von Kassen
quelle
git fetch origin master:master
.git fetch
an sich würde davon ausgehen, dass Sie den aktuellen Zweig und nicht einen anderen Zweig aktualisieren möchten.Wie sich herausstellt, ist die Antwort täuschend einfach:
Dadurch können Sie die aktualisieren
master
Zweig , ohne sie zuvor Schalt bis nach sie aktualisiert wurde.quelle
Sie machen sich Sorgen um etwas, das nicht behoben werden kann, da Git-Operationen nicht atomar sind. Sie werden immer eine Lücke haben, in der sich Ihr Arbeitsverzeichnis auf halbem Weg zwischen den Zweigen befindet, selbst wenn Sie den Master aktualisieren, ohne vorher zu ihm zu wechseln. Aus diesem Grund ist Git kein Bereitstellungstool .
Da Sie nicht wirklich Code in der Produktionsumgebung zu begehen (hoffe ich), nicht wahr tatsächlich benötigte eine Verzweigung haben ausgecheckt. Sie können einfach eine
git fetch
Option ausführen, um Ihre Remote-Refs zu aktualisieren und danngit checkout origin/master
das Arbeitsverzeichnis direkt in das Commit zu verschieben, auf das aktuell verwiesen wirdorigin/master
. Dies versetzt Sie in einen Zustand mit losgelöstem Kopf, aber auch hier spielt es keine Rolle, da Sie keinen Code festschreiben.Dies ist das kleinste Loch, das Sie bekommen werden, aber wie gesagt, es gibt immer noch ein Loch.
checkout
ist nicht atomar.quelle
origin/master
, das könnte genau das Richtige sein.git fetch
bevor Sie etwas anderes tun, und stellen Sie die eigentliche Datenübertragung aus dem Weg.Sie können update-ref dafür verwenden:
Beachten Sie, dass dadurch alle lokalen Commits in der Hauptniederlassung weggeworfen werden. In Ihrem Fall wird es keine geben, also ist das in Ordnung. Für andere Leute, die dies versuchen, wo es lokale Commits gibt, halte ich es nicht für möglich, da die Zusammenführung nur für den aktuellen Zweig ausgeführt werden kann.
quelle
git branch --force master origin/master
? Dies zwingt den lokalen Kopfmaster
, auf den Kopf vonorigin
smaster
Malvineous 'Lösung funktioniert für mich
Geben Sie einfach den Fehler ein
Also laufe ich mit der Option -D
Vielen Dank
quelle
git fetch origin master:master
master
.master
, die noch nicht gepusht wurden,origin/master
werden diese in Ihren Master übernommen.quelle