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ą:

2.9
git config --global alias.up '!git stash && git pull --rebase && git stash pop'
2.9
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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow