Sök…
Introduktion
Till skillnad från att trycka med Git där dina lokala förändringar skickas till det centrala förvarets server, drar du med Git den aktuella koden på servern och "drar" den ner från förvarets server till din lokala maskin. Det här ämnet förklarar processen för att dra kod från ett förvar med Git samt de situationer man kan stöta på när man drar olika kod i den lokala kopian.
Syntax
- git pull [alternativ [<deposition> [<refspec> ...]]
parametrar
parametrar | detaljer |
---|---|
--quiet | Ingen textutmatning |
-q | --quiet för - --quiet |
--verbose | ordbok textutmatning. Skickas för att hämta respektive slå samman / rebase-kommandon. |
-v | kortfattad för --verbose |
--[no-]recurse-submodules[=yes | on-demand | no] | Hämta nya åtaganden för undermoduler? (Inte för att detta inte är en pull / checkout) |
Anmärkningar
git pull
kör git fetch
med de givna parametrarna och kallar git merge
att slå samman de hämtade grenhuvudena i den aktuella grenen.
Uppdatering med lokala förändringar
När lokala förändringar finns, avbryter Git git pull
kommandot rapportering:
fel: Dina lokala ändringar av följande filer skulle skrivas över genom sammanslagning
För att uppdatera (som svn-uppdatering gjorde med subversion) kan du köra:
git stash
git pull --rebase
git stash pop
Ett bekvämt sätt kan vara att definiera ett alias med hjälp av:
git config --global alias.up '!git stash && git pull --rebase && git stash pop'
git config --global alias.up 'pull --rebase --autostash'
Nästa kan du helt enkelt använda:
git up
Dra kod från fjärrkontrollen
git pull
Dra, skriv över lokalt
git fetch
git reset --hard origin/master
Akta dig: Medan åtaganden kasseras med reset --hard
kan återställas med hjälp av reflog
och reset
raderas oåtkomna ändringar för alltid.
Ändra origin
och master
till fjärrkontrollen och grenen du vill med kraft dra till respektive om de heter olika.
Att hålla linjär historia när du drar
Återfasning när du drar
Om du drar in nya åtaganden från fjärrlagret och du har lokala förändringar i den nuvarande grenen kommer git automatiskt att slå samman fjärrversionen och din version. Om du vill minska antalet sammanslagningar på din gren kan du säga git att du ska ombasera dina åtaganden på den fjärrversionen av grenen.
git pull --rebase
Gör det till standardbeteendet
För att göra detta till standardbeteende för nyskapade grenar skriver du följande kommando:
git config branch.autosetuprebase always
För att ändra beteendet hos en befintlig gren använder du följande:
git config branch.BRANCH_NAME.rebase true
Och
git pull --no-rebase
För att utföra ett normalt sammanslagningsdrag.
Kontrollera om det går snabbt framåt
Om du bara tillåter snabbspolning av den lokala filialen kan du använda:
git pull --ff-only
Detta visar ett fel när den lokala grenen inte är snabbspolbar och måste antingen ombaseras eller slås samman med uppströms.
Dra, "tillåtelse nekad"
Vissa problem kan uppstå om .git
mappen har fel behörighet. Åtgärda problemet genom att ställa in ägaren till den kompletta .git
mappen. Ibland händer det att en annan användare drar och ändrar rättigheterna för .git
mappen eller filerna.
Så här löser du problemet:
chown -R youruser:yourgroup .git/
Dra ändringar till ett lokalt arkiv
Enkelt drag
När du arbetar på ett fjärrlager (säg, GitHub) med någon annan, kommer du någon gång att vilja dela dina ändringar med dem. När de har tryckt på sina ändringar till ett fjärrlager kan du hämta ändringarna genom att dra från detta arkiv.
git pull
Kommer att göra det, i de flesta fall.
Dra från en annan fjärrkontroll eller gren
Du kan dra ändringar från en annan fjärrkontroll eller gren genom att ange deras namn
git pull origin feature-A
Kommer att dra grenfunktionen feature-A
origin
i din lokala filial. Observera att du kan direkt ange en URL istället för ett fjärrnamn och ett objektnamn som en SHA istället för ett filialnamn.
Manuell dragning
För att imitera beteendet hos en git pull, kan du använda git fetch
sedan git merge
git fetch origin # retrieve objects and update refs from origin
git merge origin/feature-A # actually perform the merge
Detta kan ge dig mer kontroll och låter dig inspektera den avlägsna grenen innan du slår den ihop. Faktiskt, efter att ha hämtat, kan du se de avlägsna grenarna med git branch -a
, och kolla in dem med
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
Detta kan vara mycket praktiskt när du behandlar dragförfrågningar.