Diferencia entre git pull --rebase y git pull --ff-only

102

Digamos que se origin/masterha comprometido A--B--Cy mi se local/masterha comprometido A--B--D.

¿Qué pasará si lo uso git pull --rebase?

¿Qué pasará si lo uso git pull --ff-only?

¿Hay alguna diferencia en el árbol de confirmación resultante?

Nico
fuente

Respuestas:

127

¿Qué pasará si uso git pull --rebase?

git pull --rebase es aproximadamente equivalente a

git fetch
git rebase origin/master

es decir, sus cambios remotos ( C) se aplicarán antes que los cambios locales ( D), dando como resultado el siguiente árbol

A -- B -- C -- D

¿Qué pasará si uso git pull --ff-only?

Fracasará.

git pull --ff-only corresponde a

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

--ff-onlyaplica los cambios remotos solo si se pueden reenviar rápidamente. Del hombre:

Negarse a fusionarse y salir con un estado distinto de cero a menos que el HEAD actual ya esté actualizado o la fusión se pueda resolver como un avance rápido

Dado que sus sucursales locales y remotas han divergido, no se pueden resolver con un avance rápido y git pull --ff-onlyfallarían.

Gabriele Petronella
fuente
¿Qué pasaría si no hay compromiso Den el cambio local? ¿Ambos comandos serían equivalentes?
Nico
7
Sí, ambos resultarían en A--B--C.
Gabriele Petronella
que git pull --rebase --ff-onlyharia (asumiendo que hay C & D)
Refael Ackermann
2
IIRC, la opción --ff-only simplemente se ignora cuando se combina con --rebase
Gabriele Petronella
5
@BreakingBenjamin es útil si desea garantizar un historial lineal. De forma predeterminada, pullpuede introducir confirmaciones de fusión, mientras que es posible que prefiera trabajar con rebase y ff solamente.
Gabriele Petronella