git pull
Der git pull-Befehl wird verwendet, um Inhalte aus einem Remote-Repository herunterzuladen und unverzüglich das lokale Repository zu aktualisieren, damit die Inhalte übereinstimmen. In Git-basierten Workflows zur Zusammenarbeit ist es häufig erforderlich, Upstream-Änderungen mit deinem lokalen Repository zusammenzuführen. Der Befehl git pull ist eigentlich eine Kombination aus zwei anderen Befehlen: git fetch gefolgt von git merge. In der ersten Phase führt git pull einen git fetch aus, der den lokalen Branch umfasst, auf den HEAD verweist. Sobald die Inhalte heruntergeladen wurden, startet git pull einen Merge-Workflow. Es wird ein neuer Merge-Commit erstellt und HEAD wird so aktualisiert, dass er auf den neuen Commit verweist.
Verwendung von git pull
Wie funktioniert "git revert"?
Der Befehl git pull führt zunächst den Befehl git fetch aus, der Inhalte von dem angegebenen Remote-Repository herunterlädt. Dann wird ein git merge ausgeführt, um die Referenzen und Heads in einem neuen lokalen Merge-Commit zusammenzuführen. Sehen wir uns das folgende Beispiel an, um den Pull- und Merge-Prozess besser zu veranschaulichen. Angenommen, wir haben ein Repository mit einem Haupt-Branch und einem Remote-Origin.
In diesem Szenario lädt git pull alle Änderungen ab dem Punkt herunter, an dem das lokale und das Haupt-Repository voneinander abweichen. In diesem Beispiel ist dies Punkt E. git pull ruft die abweichenden Remote-Commits A-B-C ab. Der Pull-Prozess erstellt dann einen neuen lokalen Merge-Commit, der die Inhalte der neuen abweichenden Remote-Commits enthält.
Zugehöriges Material
Git-Protokoll für Fortgeschrittene
Lösung anzeigen
Git kennenlernen mit Bitbucket Cloud
Im Diagramm oben sehen wir den neuen Commit H. Bei diesem Commit handelt es sich um einen neuen Merge-Commit, der die Inhalte der Remote-Commits A-B-C umfasst und über eine kombinierte Protokollnachricht verfügt. Dieses Beispiel ist eine von mehreren git pull-Merging-Strategien. Eine --rebase-Option kann an git pull angefügt werden, um eine Rebase-Merging-Strategie anstatt eines Merge-Commit zu verwenden. Im nächsten Beispiel wird ein Rebase-Pull veranschaulicht. Angenommen, wir befinden uns an einem Ausgangspunkt unseres ersten Diagramms und wir haben git pull --rebase ausgeführt.
In diesem Diagramm sehen wir jetzt, dass ein Rebase-Pull nicht den neuen H-Commit erstellt. Stattdessen wurden beim Rebasing die Remote-Commits A--B--C kopiert. Die lokalen Commits E--F--G wurden umgeschrieben und werden nach den Remote-Commits im lokalen Origin/Main-Commit-Verlauf angezeigt.
Allgemeine Optionen
git pull <remote> Mit diesem Befehl rufst du die im angegebenen Repository hinterlegte Kopie des aktuellen Branches ab und führst diese Kopie sofort mit der lokalen Kopie zusammen. Er entspricht git fetch <remote> gefolgt von git merge origin/<aktueller-Branch>.
git pull --no-commit <remote>
Ähnlich wie beim Standard-Aufruf werden hier Remote-Inhalte abgerufen, aber es wird kein neuer Merge-Commit erstellt.
git pull --rebase <remote>
Dieser Befehl funktioniert ebenso wie der vorherige, verwendet statt git merge jedoch git rebase zur Integration des Remote-Branches in den lokalen Branch.
git pull --verbose
Liefert während eines Pulls ausführlichen Output, der die heruntergeladenen Inhalte und die Merge-Details anzeigt.
Erläuterung von Git Pull
git pull ist die Git-Version von svn update. Der Befehl ist eine einfache Möglichkeit, dein lokales Repository mit Upstream-Änderungen zu synchronisieren. Das nachfolgende Schaubild illustriert die einzelnen Schritte des Pull-Prozesses.
Zunächst scheint es, dass dein Repository synchronisiert ist. Doch dann offenbart git fetch, dass an der im Origin hinterlegten Version des Haupt-Branch Änderungen vorgenommen wurden, seit du das letzte Mal nachgeschaut hast. git merge integriert dann den Remote-Haupt-Branch sofort in den lokalen Haupt-Branch.
Git pull und Synchronisation
git pull ist einer der vielen Befehle, die für das "Synchronisieren" von Remote-Inhalten verantwortlich sind. Mit dem Befehl git remote wird festgelegt, auf welchen Remote-Endpunkten die Synchronisierungsbefehle arbeiten. Der Befehl git push wird verwendet, um Inhalte in ein Remote-Repository hochzuladen.
Der Befehl git fetch kann mit git pull verwechselt werden. Beide werden verwendet, um Remote-Inhalte herunterzuladen. Es gibt einen wichtigen Sicherheitsunterschied zwischen git pull und git fetch. git fetch kann als "sichere" Option betrachtet werden, wohingegen git pull als unsicher angesehen werden kann. git fetch lädt die Remote-Inhalte herunter und verändert den Zustand des lokalen Repositorys nicht. Alternativ dazu lädt git pull Remote-Inhalte herunter und versucht sofort, den lokalen Zustand an die Inhalte anzupassen. Dies kann unabsichtlich dazu führen, dass sich das lokale Repository in einem Konfliktzustand befindet.
Pulling vs. Rebasing
Die --rebase-Option kann verwendet werden, um einen linearen Verlauf durch Vermeidung unnötiger Merge-Commits sicherzustellen. Viele Entwickler ziehen das Rebasing dem Merging vor. Damit setzen sie ihre Änderungen quasi an die Spitze aller bisher vorgenommenen Änderungen durch andere. In diesem Sinne entspricht git pull mit dem --rebase-Flag dem Befehl svn update noch viel eher als ein reiner git pull.
Tatsächlich sind Pulls mit --rebase ein so häufig genutzter Workflow, dass eine dedizierte Konfigurationsoption für sie implementiert wurde:
git config --global branch.autosetuprebase always Wenn du diesen Befehl ausführst, nutzen zukünftige Befehle des Typs git pull statt git merge die Variante git rebase zur Integration.
Beispiele für Git Pull
Die folgenden Beispiele zeigen die Verwendung von git pull in gängigen Szenarien:
Standardverhalten
git pull
Das Ausführen des Standardaufrufs von git pull entspricht git fetch origin HEAD und git merge HEAD, wobei HEAD auf den aktuellen Branch verweist.
Git pull auf Remote-Ressourcen
git checkout new_feature
git pull <remote repo> Im ersten Beispiel wird ein Checkout ausgeführt und zum Branch git pull ausgeführt und git merge initiiert.
Rebasing mit git pull anstatt Mergen
Im folgenden Beispiel zeigen wir dir, wie eine Synchronisierung mithilfe eines Rebase mit dem Haupt-Branch des zentralen Repositorys funktioniert:
git checkout main
git pull --rebase origin Hiermit werden deine lokale Änderungen den Beiträgen vorangestellt, die andere bereits geliefert haben.
Diesen Artikel teilen
Nächstes Thema
Lesenswert
Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.
Bitbucket-Blog
DevOps-Lernpfad