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ń?

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ą.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.