Git Pull vs Git Rebase

123

Jestem noob w Git i próbuje dowiedzieć się różnicę między git pullvs git rebase. Czy ktoś może podać przykład, kiedy użyć której opcji, skoro czuję, że obie służą temu samemu celowi.

user4943236
źródło
Tak. Różnica między pull i rebase polega na tym, że pull powoduje scalenie. Więc odpowiedź na twoje pytanie znajduje się pod linkiem, który wkleiłem.
Thibault D.
1
@ user4943236 1) nawet nie wiesz, kto zlekceważył twoje pytanie, nie oskarżaj ludzi bez powodu 2) gdyby to był mój głos przeciw, nie usunąłbym go tylko dlatego, że tak łatwo jest znaleźć odpowiedź, czytając dokumentacja
Tim
Czy to odpowiada na twoje pytanie? git pull VS git fetch Vs git rebase
Shiwangini

Odpowiedzi:

130

git pulli git rebasenie są wymienne, ale są ze sobą ściśle powiązane.

git pullpobiera najnowsze zmiany bieżącej gałęzi ze zdalnego i stosuje te zmiany do lokalnej kopii oddziału. Zwykle odbywa się to przez scalanie, tj. Zmiany lokalne są łączone ze zmianami zdalnymi. Więc git pulljest podobny do git fetch & git merge.

Rebasing jest alternatywą dla scalania. Zamiast tworzyć nowe zatwierdzenie, które łączy dwie gałęzie, przenosi zatwierdzenia jednej z gałęzi na drugą.

Możesz ściągać używając rebase zamiast merge ( git pull --rebase). Lokalne zmiany, które wprowadziłeś, zostaną ponownie oparte na zdalnych zmianach, a nie scalone ze zdalnymi zmianami.

Atlassian ma doskonałą dokumentację dotyczącą scalania i ponownego bazowania .

Piotr
źródło
51

git-pull - Pobierz z innego repozytorium lub lokalnego oddziału GIT PULL i zintegruj się z nim

Zasadniczo ściągasz zdalny oddział do lokalnego, na przykład:

git pull origin master

Ściągnie gałąź główną do twojego lokalnego repozytorium

git-rebase - lokalne zatwierdzenie portu do przodu do zaktualizowanego nagłówka GIT REBASE

Ten polega na umieszczaniu lokalnych zmian na wierzchu zmian wprowadzonych zdalnie przez innych użytkowników. Na przykład:

  • Dokonałeś pewnych zmian w swoim lokalnym oddziale, na przykład o nazwie SOME-FEATURE
  • Twój przyjaciel w międzyczasie pracował nad innymi funkcjami i połączył swoją gałąź w master

Teraz chcesz zobaczyć jego i swoje zmiany w lokalnym oddziale. Więc masteroddziału kasy :

git checkout master

wtedy możesz wyciągnąć:

git pull origin master

a potem idziesz do swojego oddziału:

git checkout SOME-FEATURE

i możesz zrobić rebase, masteraby uzyskać z niego najnowsze zmiany i umieścić zatwierdzenia gałęzi na górze:

git rebase master

Mam nadzieję, że teraz jest to dla ciebie bardziej jasne.

Tomasz
źródło
15
Nie musisz kupować mistrza. Zostań na swojej gałęzi i zrób: git fetchwtedy git rebase origin/master.
Antoine Martin,
Sprawdzając lokalny wzorzec, a następnie wyciągając wzorzec pochodzenia, zaktualizuje również twój lokalny wzorzec. Jest to jedna z najlepszych praktyk, które należy zastosować
Ashwani
20

W skrócie :

-> Git Merge: Po prostu połączy twoje i zdalne zmiany, a to utworzy kolejny rekord historii zatwierdzeń

-> Git Rebase: Przedkłada twoje zmiany ponad wszystkie nowe zdalne zmiany i przepisuje historię zatwierdzeń, więc twoja historia zmian będzie znacznie czystsza niż git merge. Rebase to destrukcyjna operacja. Oznacza to, że jeśli nie zastosujesz go poprawnie, możesz stracić wykonaną pracę i / lub złamać spójność repozytoriów innych programistów.

Saurin Vala
źródło