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.
materiały pokrewne
Zaawansowany dziennik Git
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
.
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.
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 git pull
z przekazaniem parametru 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ł
Następny temat
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.