
Steve Bennett
Angenommen, mein aktueller Zweig ist myfeature. Ich möchte den Master auf den neuesten Stand bringen. Beide git merge
git pull
immer in den aktuellen Zweig zusammenführen, soweit ich das beurteilen kann.
Gibt es eine Möglichkeit, Änderungen von einem entfernten Zweig (z. B. Ursprung/Master) in einen Zweig zu mischen, in dem ich mich derzeit nicht befinde (Master)? Ich kann mir einen Weg vorstellen:
git stash
git checkout master
git pull origin/master
git checkout myfeature
git stash apply
Gibt es einen besseren?
(Möglicherweise ist meine ganze Frage falsch: würde git fetch
Master automatisch aktualisieren, um Ursprung/Master abzugleichen, wenn Remote-Tracking aktiviert ist?)

pkamb
git fetch -u origin master:master
Git-Branches zusammenführen, aktualisieren und abrufen, ohne Checkouts zu verwenden
git fetch -u <remote> <remoteBranch>:<localBranch>
Das -u
oder --update-head-ok
stellt sicher, dass der Befehl auch dann noch funktioniert, wenn Sie den angegebenen Zweig ausgecheckt haben, was andernfalls zu dem Fehler führt:
fatal: Weigert sich, in den aktuellen Zweig refs/heads/master des nicht-nackten Repositorys zu holen

Torek
Sie haben Recht, dass Pull/Merge nur in den aktuellen Zweig zusammengeführt wird.
Sie können jedoch weiterhin fetch verwenden. Zum Beispiel (Namen unten geändert, um die Unschuldigen zu schützen, aber die Hashes sind echt):
$ git branch | grep '^*'
* SOMEBRANCH
$ git rev-parse OTHER_BRANCH origin/OTHER_BRANCH
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
$ git fetch
7b9b8e5..1efca56 OTHER_BRANCH -> origin/OTHER_BRANCH
$ git rev-parse OTHER_BRANCH origin/OTHER_BRANCH
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
1efca56c08b7a0f511a3951195656a798c56aa62
In diesem Fall, fetch
aktualisierte eine Reihe von Ursprungs-/Zweigstellen. Keine der lokalen Niederlassungen wurde aktualisiert (git rev-parse
Ausgabe für diese bleibt gleich), aber die neuen Commits sind jetzt im Repo und können angezeigt werden (git log origin/OTHER_BRANCH
, gitk --all
etc).
Je nach Bedarf kann dies ausreichend sein. Insbesondere können Sie sehen, was angewendet werden muss origin/master
auf zu master
und das alles, ohne Ihre aktuelle Filiale zu verlassen.

pkamb
Ich habe angefangen, github zu verwenden hub sync
Helfer, um diesen Prozess zu automatisieren, anstatt sich darauf zu verlassen, einzelne Branches abzurufen, die sich zwischen den verschiedenen Repos ändern, an denen Sie arbeiten:
hub ist eine Erweiterung für Befehlszeilen-Git, mit der Sie alltägliche GitHub-Aufgaben erledigen können, ohne das Terminal verlassen zu müssen. https://hub.github.com/
$ hub sync
- Wenn der lokale Zweig veraltet ist, spulen Sie ihn vor;
- Wenn der lokale Zweig ungepushte Arbeit enthält, warnen Sie davor;
- Wenn der Zweig zusammengeführt erscheint und sein Upstream-Zweig gelöscht wurde, löschen Sie ihn.
Betrieb hub sync
sicher aktualisiert alles Ihrer lokalen Branches auf die Version auf der Fernbedienung.
10138100cookie-checkWie zieht man in den Not-the-current-Zweig?yes
Ich habe die Antwort gefunden, die für mich in einem anderen Stackoverflow-Beitrag funktioniert hat: stackoverflow.com/questions/3216360/… Grundsätzlich:
git fetch <remote> <srcBranch>:<destBranch>
– Koralle
10. September 2014 um 22:51 Uhr
Mögliches Duplikat von Merge, update, and pull Git branchs without using checkouts
– pkamb
10. August 2017 um 20:26 Uhr