Kiedyś zacząłem używać git i nie do końca rozumiem zawiłości. Moje podstawowe pytanie tutaj polega na ustaleniu różnicy między git pull
a git pull --rebase
, ponieważ dodanie --rebase
opcji nie wydaje się robić czegoś zupełnie innego: wystarczy pociągnąć.
Pomóż mi zrozumieć różnicę.
Odpowiedzi:
git pull
=git fetch
+git merge
przed śledzeniem gałęzi upstreamgit pull --rebase
=git fetch
+git rebase
przed śledzeniem gałęzi upstreamJeśli chcesz wiedzieć jak
git merge
i czym sięgit rebase
różnią, przeczytaj to .źródło
git pull --rebase
jest takie samogit fetch
igit rebase
zasadniczo jest, ale nie jest dokładnie semantycznie równoważne. Istnieją pewne różnice, z których niektóre wyjaśniono tutaj. gitolite.com/git-pull--rebasefetch
?Odpowiedź pochodzi z (i nieznacznie zmodyfikowano):
http://gitolite.com/git-pull--rebase
źródło
a---b+c---d+e---f---p'---q'---r' (foo)
ponieważ zmiana bazy zmienia hasze.A
i wysłałem PR do repozytorium poprzedzającego, które zostało zaakceptowane. Potem, kiedy zrobiłem togit pull --rebase
przeciwko repozytorium upstream, nie dostałem nowegoA'
zatwierdzenia na szczycie repozytorium upstream. W rzeczywistości nic nieA'
istniało. Czy to dlatego, żeA
został włączony do systemu? A może dlatego, że nie było różnicy między wersją wstępną a moją zmienioną na wersję?git pull --rebase
. Ale jedną z rzeczy, która myli mnie w tej hipotetycznej sytuacji, jest to, że opiekun wyższego szczebla zmienił historię projektu, która została już wciągnięta do repozytoriów lokalnych programistów. Czy ogólnie nie jest to po prostu zła praktyka? Jeśli chciał zmiażdżyć historię zmian / przepisań, powinien to zrobić przed integracją z centralnym repozytorium, aby uniknąć tego rodzaju konfliktów.Załóżmy, że masz dwa zatwierdzenia w oddziale lokalnym:
Po „git pull” pojawi się:
Po „git pull --rebase” nie będzie punktu scalania G. Zauważ, że D i E stają się różnymi zatwierdzeniami:
źródło
git rebase
robi? Ale mówimy o tymgit pull --rebase
. I to są różne rzeczy.W najprostszym przypadku braku kolizji
Zobacz też:
man git-pull
Zobacz także:
Kiedy powinienem używać git pull --rebase?
http://git-scm.com/book/en/Git-Branching-Rebasing
źródło
git sdd modified-file; git rebase --continue
lub scal:git add modified-file; git commit;
gdziemodified-file
twój plik lokalny został zmodyfikowany ręcznie /fetch
? Dlaczego stworzyli dwarebase
przepływy? 1)git rebase
i 2)git pull --rebase
?Jest to ważne, aby zrozumieć różnicę między Scalaniem a Rebase.
Aby uzyskać szczegółowe informacje, patrz - http://www.derekgourlay.com/archives/428
źródło