Diferença entre git pull --rebase e git pull --ff-only

102

Digamos que origin/mastertem commit A--B--Ce meu local/mastertem commit A--B--D.

O que acontecerá se eu usar git pull --rebase?

O que acontecerá se eu usar git pull --ff-only?

Existe alguma diferença na árvore de commit resultante?

Nico
fonte

Respostas:

127

O que acontecerá se eu usar git pull --rebase?

git pull --rebase é aproximadamente equivalente a

git fetch
git rebase origin/master

ou seja, suas alterações remotas ( C) serão aplicadas antes das alterações locais ( D), resultando na seguinte árvore

A -- B -- C -- D

O que acontecerá se eu usar git pull --ff-only?

Isso irá falhar.

git pull --ff-only corresponde a

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

--ff-onlyaplica as alterações remotas apenas se elas puderem ser avançadas. Do homem:

Recuse-se a mesclar e saia com um status diferente de zero, a menos que o HEAD atual já esteja atualizado ou a mesclagem possa ser resolvida como um avanço rápido

Como suas filiais locais e remotas divergiram, elas não podem ser resolvidas por um avanço rápido e git pull --ff-onlyfalharão.

Gabriele Petronella
fonte
O que aconteceria se não houvesse commit Dna mudança local? Ambos os comandos seriam equivalentes?
Nico de
7
Sim, ambos resultariam em A--B--C.
Gabriele Petronella
o que git pull --rebase --ff-onlyfaria? (assumindo que haja C & D)
Refael Ackermann
2
IIRC a opção --ff-only simplesmente é ignorada quando emparelhada com --rebase
Gabriele Petronella
5
@BreakingBenjamin é útil se você deseja garantir um histórico linear. Por padrão, pullpode introduzir commits de mesclagem, enquanto você pode preferir trabalhar apenas com rebase e ff.
Gabriele Petronella