Unterschied zwischen git pull --rebase und git pull --ff-only

98

Sagen wir, origin/masterhat Commit A--B--Cund mein local/masterhat Commit A--B--D.

Was passiert, wenn ich benutze git pull --rebase?

Was passiert, wenn ich benutze git pull --ff-only?

Gibt es einen Unterschied im resultierenden Commit-Baum?

Nico
quelle

Antworten:

125

Was passiert, wenn ich git pull --rebase verwende?

git pull --rebase ist ungefähr gleichbedeutend mit

git fetch
git rebase origin/master

Das heißt, Ihre Remote-Änderungen ( C) werden vor den lokalen Änderungen ( D) angewendet , was zu folgendem Baum führt

A -- B -- C -- D

Was passiert, wenn ich git pull --ff-only verwende?

Es wird scheitern.

git pull --ff-only entspricht

git fetch
git merge --ff-only origin/master

--ff-onlyWendet die Remote-Änderungen nur an, wenn sie schnell weitergeleitet werden können. Vom Mann:

Verweigern Sie das Zusammenführen und Beenden mit einem Status ungleich Null, es sei denn, der aktuelle HEAD ist bereits auf dem neuesten Stand oder die Zusammenführung kann als schneller Vorlauf aufgelöst werden

Da Ihre lokalen und Remote-Niederlassungen auseinander gegangen sind, können sie nicht durch einen schnellen Vorlauf gelöst werden und git pull --ff-onlywürden fehlschlagen.

Gabriele Petronella
quelle
Was würde passieren, wenn die Dlokale Änderung nicht festgeschrieben wird ? Wären beide Befehle gleichwertig?
Nico
7
Ja, beide würden dazu führen A--B--C.
Gabriele Petronella
was würde git pull --rebase --ff-onlytun (vorausgesetzt, es gibt C & D)
Refael Ackermann
2
IIRC die Option --ff-only wird einfach ignoriert, wenn sie mit --rebase
Gabriele Petronella
5
@BreakingBenjamin Es ist nützlich, wenn Sie einen linearen Verlauf garantieren möchten. Standardmäßig pullkönnen Merge-Commits eingeführt werden, während Sie möglicherweise nur mit Rebase und ff arbeiten möchten.
Gabriele Petronella