kommandot git fetch
begår, filer och refs från ett fjärrförråd i din lokala repo. Hämta är vad du gör när du vill se vad alla andra har arbetat med. Det liknar svn update
eftersom det låter dig se hur centralhistoriken har utvecklats, men det tvingar dig inte att faktiskt slå samman ändringarna i ditt förråd. Git isolerar hämtat innehåll från befintligt lokalt innehåll; det har absolut ingen effekt på ditt lokala utvecklingsarbete., Hämtat innehåll måste uttryckligen kontrolleras med kommandotgit checkout
. Detta gör att hämta ett säkert sätt att granska begår innan integrera dem med din lokala förvaret.
git pull
ochgit fetch
kommandon är tillgängliga för att utföra uppgiften. Du kan övervägagit fetch
den ”säkra” versionen av de två kommandona. Det kommer att ladda ner fjärrinnehållet men inte uppdatera din lokala repo arbetsläge, lämnar ditt nuvarande arbete intakt., git pull
är det mer aggressiva alternativet; det kommer att ladda ner fjärrinnehållet för den aktiva lokala filialen och omedelbart köra git merge
för att skapa en sammanslagning begå för det nya fjärrinnehållet. Om du har pågående ändringar som pågår kommer detta att orsaka konflikter och starta flödet för konfliktlösning.
hur git hämta fungerar med avlägsna grenar
för att bättre förstå hur git fetch
fungerar låt oss diskutera hur Git organiserar och butiker begår., Bakom kulisserna, i förvaret ./.git/objects
katalog, git lagrar alla begår, lokala och fjärr. Git håller avlägsna och lokala gren förbinder sig tydligt separat genom användning av gren refs. Refs för lokala grenar lagras i ./.git/refs/heads/
. Exekvering av kommandotgit branch
kommer att mata ut en lista över de lokala grenreferna. Följande är ett exempel på git branch
– utmatning med några demo-grennamn.,
git branch
master
feature1
debug2
undersöka innehållet i katalogen/.git/refs/heads/
skulle avslöja liknande utdata.
ls ./.git/refs/heads/
master
feature1
debug2
fjärr grenar är precis som lokala grenar, förutom att de karta för att begå från någon annans arkiv. Avlägsna grenar prefixeras av fjärrkontrollen de tillhör så att du inte blandar dem med lokala grenar. Liksom lokala grenar har Git också refs för avlägsna grenar. Remote branch refs bor i katalogen ./.git/refs/remotes/
., Nästa exempelkodavsnitt visar de grenar du kan se efter att ha hämtat en fjärrrepo som heter remote-repo:
git branch -r
# origin/master
# origin/feature1
# origin/debug2
# remote-repo/master
# remote-repo/other-feature
den här utmatningen visar de lokala grenarna vi tidigare hade undersökt men visar dem nu prefixerade med origin/
. Dessutom ser vi nu de avlägsna grenarna prefixerade med remote-repo
. Du kan kolla in en avlägsen gren precis som en lokal, men detta sätter dig i en friståendeHEAD
tillstånd (precis som att kolla in en gammal commit). Du kan tänka på dem som skrivskyddade grenar., För att visa dina fjärrgrenar, skicka bara-r
– flaggan till kommandotgit branch
.
Du kan inspektera fjärrgrenar med de vanligagit checkout
ochgit log
– kommandona. Om du godkänner ändringarna som en fjärr-gren innehåller kan du slå samman den i en lokal gren med en normal git merge
. Så, till skillnad från SVN, är synkronisering av ditt lokala förråd med ett fjärrförråd faktiskt en tvåstegsprocess: hämta och slå sedan samman. Kommandotgit pull
är en lämplig genväg för denna process.,
Git hämta kommandon och alternativ
git fetch <remote>
hämta alla grenar från förvaret. Detta hämtar också alla nödvändiga åtaganden och filer från det andra förvaret.
git fetch <remote> <branch>
samma som ovanstående kommando, men hämta endast den angivna grenen.
git fetch --all
ett kraftdrag som hämtar alla registrerade fjärrkontroller och deras filialer:
git fetch --dry-run
alternativet--dry-run
kommer att utföra en demokörning av kommandot., Det kommer att ge exempel på åtgärder som det kommer att ta under hämtningen men inte tillämpa dem.
git hämta en fjärr gren
följande exempel visar hur du hämtar en fjärr gren och uppdatera din lokala arbetsstatus till fjärrinnehållet. I det här exemplet antar vi att det finns ett centralt repo-ursprung från vilket det lokala arkivet har klonats från att använda kommandot git clone
. Låt oss också anta en ytterligare fjärrförvar som heter coworkers_repo som innehåller en feature_branch som vi kommer att konfigurera och hämta., Med dessa antaganden set låt oss fortsätta exemplet.
För det första måste vi konfigurera fjärrrepoen med kommandot git remote
.
git remote add coworkers_repo [email protected]:coworker/coworkers_repo.git
Här har vi skapat en referens till medarbetare repo med repo URL. Vi kommer nu att skicka det fjärrnamnet till git fetch
för att ladda ner innehållet.
git fetch coworkers_repo coworkers/feature_branch
fetching coworkers/feature_branch
Vi har nu lokalt innehållet i medarbetare/feature_branch vi behöver integrera detta i vår lokala arbetskopia., Vi börjar denna process genom att använda kommandot git checkout
för att checka ut den nyligen nedladdade fjärrgrenen.
git checkout coworkers/feature_branch
Note: checking out coworkers/feature_branch'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
utgången från denna checkout-operation indikerar att vi befinner oss i ett fristående tillståndHEAD
. Detta förväntas och innebär att vårHEAD
ref pekar på en ref som inte är i sekvens med vår lokala historia. EftersomHEAD
pekas på medarbetare/feature_branch ref, kan vi skapa en ny lokal gren från den ref., Utmatningen’ detached HEAD
’ visar oss hur vi gör detta med kommandotgit checkout
:
git checkout -b local_feature_branch
Här har vi skapat en ny lokal gren som heter local_feature_branch. Detta sätter uppdateringar HEAD
för att peka på det senaste fjärrinnehållet och vi kan fortsätta utvecklingen på det från den här tiden.
synkronisera ursprung med git hämta
följande exempel går igenom den typiska arbetsflödet för att synkronisera din lokala förvaret med den centrala förvaret Huvud gren.,
git fetch origin
detta kommer att visa de grenar som hämtades:
åtagandena från dessa nya fjärrgrenar visas som kvadrater istället för cirklar i diagrammet nedan. Som du kan se ger git fetch
dig tillgång till hela grenstrukturen i ett annat arkiv.,
för att se vad som har lagts till i uppströmsmästaren kan du köra engit log
med ursprung/master som filter:
git log --oneline master..origin/master
för att godkänna ändringarna och slå samman dem i din lokala huvudgren använd följande kommandon:
git checkout master
git log origin/master
då kan vi användagit merge origin/master
:
git merge origin/master
ursprungs – / Master-och huvudgrenarna pekar nu på samma åtagande, och du synkroniseras med uppströmsutvecklingen.,
git fetch summary
i granskning ärgit fetch
ett primärt kommando som används för att ladda ner innehåll från ett fjärrförråd. git fetch
används tillsammans med git remote
, git branch
, git checkout
, och git reset
för att uppdatera ett lokalt arkiv till tillståndet för en fjärrkontroll. Kommandotgit fetch
är en kritisk del av samverkande git-arbetsflöden., git fetch
has similar behavior to git pull
, however, git fetch
can be considered a safer, nondestructive version.