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?

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.