Git Pull erzwingen
In diesem Tutorial lernen wir, wie man Änderungen aus dem Remote-Repository zwangsweise in Git zieht.
Manchmal müssen wir die lokalen Änderungen möglicherweise verwerfen und sie durch Aktualisierungen aus dem Remote-Repository in einer kollaborativen Entwicklungsumgebung ersetzen.
Wir verwenden den Befehl git pull
, um die Änderungen aus dem Remote-Repository in den lokalen Zweig im lokalen Repository zu holen.
Der Befehl git pull
ist nur erfolgreich, wenn die Änderungen im lokalen Zweig hinter den Änderungen im Remote-Repository liegen.
Wenn die Änderungen des lokalen Zweigs und des entfernten Repositorys voneinander abweichen und wir die lokalen Änderungen verwerfen möchten, müssen wir einen git pull
erzwingen, um die lokalen Änderungen zu überschreiben.
Wir werden dies nun an einem Beispiel erläutern.
Verwenden von git fetch
, git reset
und git merge
, um die Remote-Änderungen in Git mit Gewalt abzurufen
Der Befehl git pull
ist keine einzelne Operation. Der Befehl git pull
führt den Befehl viz aus. git fetch
, um die Daten aus dem entfernten Repository abzurufen, und dann den Befehl git merge
, um diese Änderungen in das lokale Repository einzufügen.
Der Befehl git pull
führt also die beiden Befehle wie folgt aus.
$ git fetch
$ git merge origin/$CURRENT_BRANCH
Der Befehl git fetch
lädt die letzten Änderungen aus dem Remote-Repository herunter. Es führt kein merge
oder rebase
des lokalen Repositorys durch.
Der oben angegebene Befehl git merge
führt die Änderungen aus dem entfernten Repository, angegeben durch den Alias origin
, die zu $CURRENT_BRANCH
hinzugefügt wurden, die nicht bereits im lokalen Zweig vorhanden sind, im lokalen Repository zusammen.
Daher schlägt der git pull
fehl, wenn der lokale Zweig im lokalen Repository von dem Zweig im entfernten Repository abweicht.
Möglicherweise haben wir einige lokale Änderungen an den Dateien im Arbeitsbaum des lokalen Zweigs vorgenommen. Dies führt also dazu, dass der git pull
fehlschlägt.
Wir können uns jetzt entscheiden, die lokalen Änderungen zugunsten der Änderungen im entfernten Repository zu verwerfen.
Daher müssen wir die Änderungen mit Nachdruck ziehen, die die lokalen Änderungen überschreiben.
Wir müssen wie folgt vorgehen, um einen kraftvollen Zug der Remote-Änderungen zu erreichen.
$ git fetch
$ git reset --hard HEAD
$ git merge origin/$CURRENT_BRANCH
Der Befehl git reset
mit der Option --hard
setzt den Branch auf das zurück, was wir gerade abgerufen haben. Außerdem werden alle lokalen Änderungen an den nachverfolgten Dateien verworfen, und die nicht nachverfolgten Dateien werden gelöscht.
Verwenden Sie dies daher mit Vorsicht, da alle lokalen Änderungen verloren gehen.
Alternativ können wir die lokalen Änderungen speichern, bevor wir die Änderungen abrufen. Wir können die Änderungen mit git stash
zusammen mit dem Pull der Änderungen stashen.
Wir können wie folgt vorgehen.
$ git fetch
$ git stash
$ git merge origin/$CURRENT_BRANCH
$ git stash pop
Wenn wir also git stash
verwenden, müssen wir keinen git reset
des lokalen Zweigs des lokalen Repositorys mehr durchführen.
Wir haben den git stash pop
verwendet, um lokale Änderungen aus dem Stash zu bekommen.