Différence entre git pull --rebase et git pull --ff-only

102

Disons origin/mastera commit A--B--Cet mon local/mastera commit A--B--D.

Que se passera-t-il si j'utilise git pull --rebase?

Que se passera-t-il si j'utilise git pull --ff-only?

Y a-t-il une différence dans l'arbre de validation résultant?

Nico
la source

Réponses:

127

Que se passera-t-il si j'utilise git pull --rebase?

git pull --rebase équivaut à peu près à

git fetch
git rebase origin/master

c'est-à-dire que vos modifications distantes ( C) seront appliquées avant les modifications locales ( D), ce qui donnera l'arborescence suivante

A -- B -- C -- D

Que se passera-t-il si j'utilise git pull --ff-only?

Cela échouera.

git pull --ff-only Correspond à

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

--ff-onlyapplique les modifications à distance uniquement si elles peuvent être avancées rapidement. De l'homme:

Refusez de fusionner et de quitter avec un statut différent de zéro à moins que le HEAD actuel soit déjà à jour ou que la fusion puisse être résolue en avance rapide

Étant donné que vos succursales locales et distantes ont divergé, elles ne peuvent pas être résolues par une avance rapide et git pull --ff-onlyéchoueraient.

Gabriele Petronella
la source
Que se passerait-il s'il n'y avait aucun engagement Ddans le changement local? Les deux commandes seraient-elles équivalentes?
Nico
7
Oui, ils en résulteraient tous les deux A--B--C.
Gabriele Petronella
que ferait git pull --rebase --ff-only-on? (en supposant qu'il y ait C & D)
Refael Ackermann
2
IIRC l'option --ff-only est simplement ignorée lorsqu'elle est associée à --rebase
Gabriele Petronella
5
@BreakingBenjamin c'est utile si vous voulez garantir une histoire linéaire. Par défaut, vous pullpouvez introduire des validations de fusion, alors que vous préférerez peut-être travailler uniquement avec rebase et ff.
Gabriele Petronella