Die von Ihnen aufgeführten Schritte funktionieren, aber es gibt einen längeren Weg, der Ihnen mehr Optionen bietet:
git checkout dmgr2 # setzt Sie auf den Branch dmgr2
git fetch origin # holt Sie auf den aktuellen Stand von origin
git merge origin/master
Der fetch
-Befehl kann zu jedem beliebigen Zeitpunkt vor dem merge
ausgeführt werden, d.h. Sie können die Reihenfolge des fetch und des checkout vertauschen, da fetch
einfach zum benannten Remote (origin
) übergeht und ihm sagt: "gib mir alles, was du hast und ich nicht habe", d.h. alle Commits auf allen Branches. Sie werden in Ihr Repository kopiert, aber für jeden Branch namens branch
auf dem Remote als origin/branch
benannt.
An diesem Punkt können Sie jeden Viewer (git log
, gitk
, usw.) verwenden, um "was sie haben", was Sie nicht haben, und umgekehrt zu sehen. Manchmal ist dies nur für ein Warmes Gefühl ("ah, ja, das ist tatsächlich das, was ich will") nützlich und manchmal ist es nützlich, um die Strategie vollständig zu ändern ("Wow, ich will DIESE Dinge noch nicht").
Schließlich nimmt der merge
-Befehl den angegebenen Commit, den Sie als origin/master
bezeichnen können, und tut alles, um diesen Commit und seine Vorgänger in den Branch zu bringen, auf dem Sie sind, wenn Sie den merge
ausführen. Sie können --no-ff
oder --ff-only
einfügen, um ein Fast-Forward zu verhindern oder nur zusammenzuführen, wenn das Ergebnis ein Fast-Forward ist, falls gewünscht.
Wenn Sie die Sequenz verwenden:
git checkout dmgr2
git pull origin master
Der pull
-Befehl weist git an, git fetch
auszuführen und dann das moralische Äquivalent von git merge origin/master
. Das ist also fast das gleiche wie die beiden Schritte von Hand zu machen, aber es gibt einige subtile Unterschiede, die wahrscheinlich nicht allzu besorgniserregend für Sie sind. (Insbesondere führt der fetch
-Schritt, den pull
ausführt, nur origin/master
herüber und aktualisiert nicht die Referenz in Ihrem Repo: 1 alle neuen Commits werden nur durch die spezielle FETCH_HEAD
-Referenz referenziert.)
Wenn Sie die expliziteren Abfolge von git fetch origin
(dann optional herumschauen) und dann git merge origin/master
verwenden, können Sie auch Ihr lokales master
mit dem Remote auf den neuesten Stand bringen, mit nur einem fetch
, der über das Netzwerk ausgeführt wird:
git fetch origin
git checkout master
git merge --ff-only origin/master
git checkout dmgr2
git merge --no-ff origin/master
zum Beispiel.
1Dieser zweite Teil wurde geändert—ich sage "korrigiert"—in git 1.8.4, das jetzt "Remote-Branch"-Referenzen opportunistisch aktualisiert. (Es war, wie es in den Versionshinweisen heißt, eine bewusste Designentscheidung, das Update zu überspringen, aber es stellt sich heraus, dass mehr Menschen es bevorzugen, dass git es aktualisiert. Wenn Sie den alten Remote-Branch-SHA-1 möchten, wird er standardmäßig im Reflog gespeichert und somit wiederherstellbar. Dies ermöglicht auch eine neue git 1.9/2.0-Funktion zum Auffinden von Upstream-Rebases.)