Inną kwestią powiedział git pull
jest jak git fetch
+ git merge
.
Ale jaka jest różnica między git pull
VS git fetch
+ git rebase
?
Inną kwestią powiedział git pull
jest jak git fetch
+ git merge
.
Ale jaka jest różnica między git pull
VS git fetch
+ git rebase
?
Odpowiedzi:
Z twojego pytania powinno być całkiem oczywiste, że w rzeczywistości pytasz tylko o różnicę między git merge
i git rebase
.
Załóżmy, że jesteś w typowym przypadku - wykonałeś trochę pracy nad gałęzią master i wyciągnąłeś z źródła, który również wykonał trochę pracy. Po pobraniu rzeczy wyglądają tak:
- o - o - o - H - A - B - C (master)
\
P - Q - R (origin/master)
Jeśli scalisz w tym momencie (domyślne zachowanie git pull), zakładając, że nie ma żadnych konfliktów, kończysz się tak:
- o - o - o - H - A - B - C - X (master)
\ /
P - Q - R --- (origin/master)
Z drugiej strony, jeśli zrobiłeś odpowiedni rebase, skończyłbyś z tym:
- o - o - o - H - P - Q - R - A' - B' - C' (master)
|
(origin/master)
W obu przypadkach zawartość twojego drzewa pracy powinna być taka sama; właśnie stworzyłeś inną historię, która do tego doprowadziła . Rebase przepisuje twoją historię, sprawiając, że wygląda ona tak, jakbyś popełnił na nowej gałęzi master ( R
) pierwotnego źródła , zamiast w miejscu, w którym pierwotnie popełniłeś ( H
). Nigdy nie powinieneś używać metody rebase, jeśli ktoś inny wyciągnął już z twojej gałęzi master.
Na koniec zauważ, że możesz faktycznie skonfigurować git pull
dla danej gałęzi użycie rebase zamiast scalania, ustawiając parametr config branch.<name>.rebase
na true. Możesz to również zrobić dla pojedynczego pociągnięcia za pomocą git pull --rebase
.
git pull
jest jak bieganie git fetch
wtedy git merge
git pull --rebase
jest jak git fetch
wtedygit rebase
git pull
jest jak git fetch
+ git merge
.
„W domyślnym trybie, git pull jest skrótem,
git fetch
po którym następujegit merge
FETCH_HEAD” Bardziej precyzyjnie,git pull
działagit fetch
z podanymi parametrami, a następnie wywołujegit merge
połączenia scalonych odzyskanych głów gałęzi z bieżącą gałęzią ”
(Patrz: https://git-scm.com/docs/git-pull )
„Ale jaka jest różnica między git pull
VS git fetch
+ git rebase
”
Ponownie z tego samego źródła:
git pull --rebase
„W przypadku --rebase uruchamia git rebase zamiast git merge.”
„różnica między merge
a rebase
”
na to również tutaj odpowiedziano:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
(różnica między zmianą sposobu rejestrowania historii wersji)
git fetch + git rebase
działają polecenia. Od teraz nie ma już mniej lub więcej konfliktów na naszym drzewie git :)