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:

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'

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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow