Git
Ciągnięcie
Szukaj…
Wprowadzenie
W przeciwieństwie do wypychania za pomocą Git, gdzie lokalne zmiany są wysyłane do serwera centralnego repozytorium, ściąganie za pomocą Git przenosi bieżący kod na serwer i „ściąga” go z serwera repozytorium na komputer lokalny. W tym temacie wyjaśniono proces pobierania kodu z repozytorium za pomocą Git, a także sytuacje, które można napotkać podczas pobierania innego kodu do lokalnej kopii.
Składnia
- git pull [opcje [<repository> [<refspec> ...]]
Parametry
Parametry | Detale |
---|---|
--quiet | Brak tekstu wyjściowego |
-q | skrót dla --quiet |
--verbose | pełne wyjście tekstowe. Przekazane odpowiednio do poleceń pobierania i scalania / zmiany bazy. |
-v | skrót dla --verbose |
--[no-]recurse-submodules[=yes | on-demand | no] | Pobierać nowe zatwierdzenia dla podmodułów? (Nie to, że nie jest to pull / checkout) |
Uwagi
git pull
uruchamia git fetch
z podanymi parametrami i wywołuje git merge
celu scalenia pobranych głów gałęzi z bieżącą gałęzią.
Aktualizowanie o zmiany lokalne
Gdy lokalne zmiany są obecne, polecenie git pull
przerywa raportowanie:
błąd: lokalne zmiany poniższych plików zostaną zastąpione przez scalenie
Aby zaktualizować (podobnie jak aktualizacja svn z subversion), możesz uruchomić:
git stash
git pull --rebase
git stash pop
Wygodnym sposobem może być zdefiniowanie aliasu za pomocą:
git config --global alias.up '!git stash && git pull --rebase && git stash pop'
git config --global alias.up 'pull --rebase --autostash'
Następnie możesz po prostu użyć:
git up
Wyciągnij kod ze zdalnego
git pull
Pociągnij, nadpisz lokalnie
git fetch
git reset --hard origin/master
Uwaga: podczas gdy zatwierdzenia odrzucane przy użyciu reset --hard
można odzyskać za pomocą reflog
i reset
, niezatwierdzone zmiany są usuwane na zawsze.
Zmień odpowiednio origin
i nazwę master
na zdalną i gałąź, do której chcesz siłą pociągnąć, jeśli mają inne nazwy.
Prowadzenie historii liniowej podczas ciągnięcia
Rebasing podczas ciągnięcia
Jeśli pobierasz nowe zatwierdzenia ze zdalnego repozytorium i masz lokalne zmiany w bieżącym oddziale, git automatycznie scali wersję zdalną i twoją wersję. Jeśli chcesz zmniejszyć liczbę połączeń w oddziale, możesz powiedzieć gitowi, aby zmienił swoje zatwierdzenia na zdalnej wersji oddziału.
git pull --rebase
Czyniąc to domyślnym zachowaniem
Aby ustawić to jako domyślne zachowanie dla nowo tworzonych gałęzi, wpisz następujące polecenie:
git config branch.autosetuprebase always
Aby zmienić zachowanie istniejącego oddziału, użyj tego:
git config branch.BRANCH_NAME.rebase true
I
git pull --no-rebase
Aby wykonać normalne połączenie scalające.
Sprawdź, czy możliwe jest szybkie przewijanie do przodu
Aby zezwolić tylko na szybkie przekazywanie lokalnego oddziału, możesz użyć:
git pull --ff-only
Będzie to wyświetlać błąd, gdy lokalny oddział nie daje się szybko przewijać do przodu i musi zostać zmieniony lub połączony z wcześniejszym.
Pull, „odmowa dostępu”
Niektóre problemy mogą wystąpić, jeśli folder .git
ma nieprawidłowe uprawnienia. Rozwiązanie tego problemu poprzez ustawienie właściciela kompletnego folderu .git
. Czasami zdarza się, że inny użytkownik pobiera i zmienia prawa do folderu lub plików .git
.
Naprawić problem:
chown -R youruser:yourgroup .git/
Wyciąganie zmian do lokalnego repozytorium
Proste pociągnięcie
Kiedy pracujesz nad zdalnym repozytorium (powiedzmy GitHub) z kimś innym, w pewnym momencie będziesz chciał udostępnić mu swoje zmiany. Po ich pchnął ich zmian do zdalnego repozytorium, można odzyskać te zmiany, ciągnąc z tego repozytorium.
git pull
Zrobi to w większości przypadków.
Wyciągnij z innego pilota lub oddziału
Możesz pobrać zmiany z innego zdalnego lub oddziału, określając ich nazwy
git pull origin feature-A
Wyciągnie origin
gałęzi feature-A
origin
formularza feature-A
do lokalnego oddziału. Zauważ, że możesz bezpośrednio podać adres URL zamiast nazwy zdalnej oraz nazwę obiektu, taką jak SHA zatwierdzenia zamiast nazwy gałęzi.
Ciągnienie ręczne
Aby naśladować zachowanie git pull, możesz użyć git fetch
a następnie git merge
git fetch origin # retrieve objects and update refs from origin
git merge origin/feature-A # actually perform the merge
Zapewnia to większą kontrolę i umożliwia sprawdzenie zdalnej gałęzi przed połączeniem. Rzeczywiście, po pobraniu możesz zobaczyć zdalne gałęzie za pomocą git branch -a
i sprawdzić je za pomocą
git checkout -b local-branch-name origin/feature-A # checkout the remote branch
# inspect the branch, make commits, squash, ammend or whatever
git checkout merging-branches # moving to the destination branch
git merge local-branch-name # performing the merge
Może to być bardzo przydatne podczas przetwarzania żądań ściągania.