Close

git pull

Polecenie git pull służy do ściągania i pobierania zawartości ze zdalnego repozytorium oraz natychmiastowej aktualizacji lokalnego repozytorium zgodnie z tą zawartością. Scalanie zdalnych zmian nadrzędnych z lokalnym repozytorium jest powszechnym zadaniem w kolaboracyjnych przepływach pracy opartych na systemie Git. Polecenie git pull jest właściwie kombinacją dwóch innych poleceń — git fetch, a następnie git merge. W pierwszym kroku operacji git pull wykonane zostanie polecenie git fetch w zakresie ograniczonym do lokalnej gałęzi wskazywanej przez wskaźnik HEAD. Po pobraniu zawartości polecenie git pull spowoduje przejście do przepływu pracy scalania. Zostanie utworzony nowy commit scalenia, a wskaźnik HEAD zostanie zaktualizowany tak, aby wskazywał na nowy commit.


git pull — użycie


Jak to działa

Polecenie git pull najpierw uruchamia polecenie git fetch, które służy do pobrania zawartości z określonego repozytorium zdalnego. Następnie wykonywane jest polecenie git merge, aby scalić referencje i końcówki gałęzi zawartości zdalnej, tworząc nowy lokalny commit scalenia. Aby lepiej przedstawić proces ściągania i scalania, rozważmy następujący przykład. Załóżmy, że mamy repozytorium z gałęzią główną i zdalne źródło.

W tym scenariuszu polecenie git pull spowoduje pobranie wszystkich zmian od punktu, w którym dane lokalne i dane z gałęzi głównej zaczęły być rozbieżne. W tym przykładzie jest to punkt E. Polecenie git pull spowoduje pobranie rozbieżnych commitów zdalnych oznaczonych literami A-B-C. Operacja ściągania doprowadzi następnie do utworzenia nowego lokalnego commita scalenia z zawartością nowych rozbieżnych commitów zdalnych.

Okno konsoli
materiały pokrewne

Zaawansowany dziennik Git

Logo Bitbucket
POZNAJ ROZWIĄZANIE

Poznaj środowisko Git z rozwiązaniem Bitbucket Cloud

Na powyższym diagramie widzimy nowy commit H. Jest to nowy commit scalenia z zawartością zdalnych commitów A-B-C oraz połączonym komunikatem dziennika. Ten przykład ilustruje jedną z kilku strategii scalania za pomocą polecenia git pull. Można przekazać opcję --rebase do polecenia git pull, aby zamiast commita scalenia użyć strategii scalania przez zmianę bazy. W kolejnym przykładzie przedstawiony zostanie sposób działania polecenia „pull” ze zmianą bazy. Załóżmy, że jesteśmy w punkcie początkowym naszego pierwszego diagramu i wykonaliśmy polecenie git pull --rebase.

Z centralnego repozytorium git do lokalnego repozytorium git

Na diagramie widać teraz, że polecenie „pull” ze zmianą bazy nie powoduje utworzenia nowego commita H. Zamiast tego opcja zmiany bazy spowodowała skopiowanie zdalnych commitów A-B-C i przepisanie lokalnych commitów E-F-G, które pojawiły się po nich w historii commitów lokalnego źródła / lokalnej gałęzi głównej.

Często używane opcje


git pull <remote>

Pobiera kopię wskazanej zawartości zdalnej bieżącej gałęzi i natychmiast scala ją z kopią lokalną. Rezultat jest taki sam, jak w przypadku użycia polecenia git fetch <remote>, a następnie polecenia git merge origin/<current-branch>.

git pull --no-commit <remote>

Polecenie podobne do wywołania domyślnego. Pobiera zawartość zdalną, ale nie tworzy nowego commita scalenia.

git pull --rebase <remote>

Działa tak samo jak poprzednie polecenie „pull”, tylko zamiast integrowania gałęzi zdalnej z lokalną za pomocą polecenia git merge, wykorzystuje polecenie git rebase.

git pull --verbose

Zwraca pełne dane wyjściowe w trakcie wykonywania polecenia „pull”, co oznacza wyświetlenie ściąganej zawartości oraz szczegółów scalenia.

git pull — dyskusja


O poleceniu git pull można myśleć jak o wersji polecenia svn update w systemie Git. Jest to prosty sposób na synchronizację lokalnego repozytorium ze zmianami w gałęzi nadrzędnej. Poniższy diagram wyjaśnia poszczególne etapy procesu ściągania.

git pull

Najpierw myślisz, że Twoje repozytorium jest zsynchronizowane, ale wówczas polecenie git fetch ujawnia, że od ostatniego sprawdzenia wersja gałęzi głównej w źródle uległa zmianie. Wtedy polecenie git merge niezwłocznie integruje zdalną gałąź główną z gałęzią lokalną.

Polecenie „git pull” i synchronizacja


git pull to jedno z wielu poleceń, które można wykorzystać do synchronizowania zawartości zdalnej. Polecenie git remote służy do określania zdalnych punktów końcowych, względem których będą wykonywane polecenia synchronizacji. Polecenie git push służy do przekazywania zawartości do zdalnego repozytorium.

Polecenie git fetch można pomylić z poleceniem git pull. Obydwa służą do pobierania zawartości zdalnej. Polecenia git pull i git fetch różnią się jednak od siebie istotnie pod względem bezpieczeństwa. Polecenie git fetch można potraktować jako opcję „bezpieczną”, natomiast polecenie git pull — jako opcję mniej bezpieczną. Polecenie git fetch pobiera zdalną zawartość bez zmiany stanu lokalnego repozytorium. Z kolei polecenie git pull powoduje pobranie zdalnej zawartości i podjęcie niezwłocznej próby zmiany stanu lokalnego zgodnie z tą zawartością. Można w ten sposób nieumyślnie doprowadzić do stanu konfliktu w lokalnym repozytorium.

Ściąganie ze zmianą bazy


Opcja --rebase pozwala zapewnić, że historia pozostanie liniowa, zapobiegając tworzeniu niepotrzebnych commitów scalenia. Wielu programistów woli operację zmiany bazy zamiast scalania, ponieważ to tak, jakby powiedzieć „Chcę wprowadzić swoje zmiany do tego, co zrobili wszyscy inni”. Pod tym względem użycie polecenia git pull z flagą --rebase bardziej przypomina operację svn update niż zwykłe polecenie git pull.

W istocie ściąganie z flagą --rebase jest tak powszechnym przepływem pracy, że opracowano dedykowaną opcję konfiguracji dla tej operacji:

git config --global branch.autosetuprebase always

Po uruchomieniu tego polecenia wszystkie polecenia git pull będą skutkowały integracją zawartości za pomocą opcji git rebase zamiast git merge.

git pull — przykłady


Poniższe przykłady ilustrują możliwości zastosowania polecenia git pull w typowych scenariuszach.

Działanie domyślne

git pull

Wykonanie domyślnego wywołania polecenia git pull jest równoważne z użyciem poleceń git fetch origin HEAD i git merge HEAD, w których wskaźnik HEAD jest referencją wskazującą na bieżącą gałąź.

Polecenie „git pull” w odniesieniu do repozytoriów zdalnych

git checkout new_feature
git pull <remote repo>

W tym przykładzie najpierw jest przeprowadzane wyewidencjonowanie i przełączenie do gałęzi . Następnie jest wykonywane polecenie git pull z przekazaniem parametru . Powoduje to ściągnięcie gałęzi newfeature z repozytorium . Po zakończeniu pobierania zostanie zainicjowane polecenie git merge.

Zmiana bazy zamiast scalania w poleceniu „git pull”

Poniższy przykład ilustruje sposób synchronizacji z gałęzią główną centralnego repozytorium za pomocą operacji zmiany bazy:

git checkout main
git pull --rebase origin

To polecenie po prostu nadaje priorytet zmianom lokalnym względem tego, co zrobili dotychczas wszyscy inni.


Udostępnij ten artykuł

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ludzie współpracujący przy ścianie pełnej narzędzi

Blog Bitbucket

Ilustracja DevOps

Ścieżka szkoleniowa DevOps

Demonstracje funkcji z ekspertami Atlassian

Zobacz, jak Bitbucket Cloud współpracuje z Atlassian Open DevOps

Zapisz się do newslettera DevOps

Thank you for signing up