Różnica między git pull --rebase i git pull --ff-only

109

Powiedzmy, że origin/masterma zatwierdzenie, A--B--Ca mój local/masterma zatwierdzenie A--B--D.

Co się stanie, jeśli użyję git pull --rebase?

Co się stanie, jeśli użyję git pull --ff-only?

Czy jest jakaś różnica w wynikowym drzewie zatwierdzeń?

Nico
źródło

Odpowiedzi:

133

Co się stanie, jeśli użyję git pull --rebase?

git pull --rebase jest w przybliżeniu odpowiednikiem

git fetch
git rebase origin/master

tzn. twoje zdalne zmiany ( C) zostaną zastosowane przed lokalnymi zmianami ( D), w wyniku czego powstanie następujące drzewo

A -- B -- C -- D

Co się stanie, jeśli użyję git pull --ff-only?

To się nie uda.

git pull --ff-only koresponduje z

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

--ff-onlystosuje zdalne zmiany tylko wtedy, gdy można je przewinąć do przodu. Od mężczyzny:

Odmów scalenia i wyjścia ze statusem niezerowym, chyba że bieżący HEAD jest już aktualny lub scalenie można rozwiązać jako szybkie do przodu

Ponieważ twoje lokalne i zdalne gałęzie rozeszły się, nie można ich rozwiązać za pomocą szybkiego przewijania do przodu i git pull --ff-onlyzawiodą.

Gabriele Petronella
źródło
Co by się stało, gdyby Dzmiana lokalna nie została zatwierdzona ? Czy oba polecenia byłyby równoważne?
Nico
8
Tak, oba przyniosą skutek A--B--C.
Gabriele Petronella
co by git pull --rebase --ff-onlyzrobił? (zakładając, że są C i D)
Refael Ackermann
2
IIRC opcja --ff-only zostaje po prostu zignorowana w połączeniu z --rebase
Gabriele Petronella
5
@BreakingBenjamin jest to przydatne, jeśli chcesz zagwarantować liniową historię. Domyślnie pullmożna wprowadzać zmiany typu merge, podczas gdy wolisz pracować tylko z rebase i ff.
Gabriele Petronella