Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
-
2.52.0
2025-11-17
- 2.51.2 no changes
-
2.51.1
2025-10-15
-
2.51.0
2025-08-18
- 2.50.1 no changes
-
2.50.0
2025-06-16
- 2.49.1 no changes
-
2.49.0
2025-03-14
- 2.48.1 → 2.48.2 no changes
-
2.48.0
2025-01-10
- 2.47.2 → 2.47.3 no changes
-
2.47.1
2024-11-25
- 2.46.3 → 2.47.0 no changes
-
2.46.2
2024-09-23
- 2.45.1 → 2.46.1 no changes
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.4 no changes
-
2.44.0
2024-02-23
- 2.43.2 → 2.43.7 no changes
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.42.1 → 2.42.4 no changes
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 no changes
-
2.41.0
2023-06-01
- 2.40.1 → 2.40.4 no changes
-
2.40.0
2023-03-12
- 2.36.1 → 2.39.5 no changes
-
2.36.0
2022-04-18
- 2.35.1 → 2.35.8 no changes
-
2.35.0
2022-01-24
- 2.34.1 → 2.34.8 no changes
-
2.34.0
2021-11-15
- 2.33.2 → 2.33.8 no changes
-
2.33.1
2021-10-12
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 no changes
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 no changes
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 no changes
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 no changes
-
2.29.0
2020-10-19
- 2.27.1 → 2.28.1 no changes
-
2.27.0
2020-06-01
- 2.25.2 → 2.26.3 no changes
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 no changes
-
2.24.0
2019-11-04
- 2.23.1 → 2.23.4 no changes
-
2.23.0
2019-08-16
- 2.22.2 → 2.22.5 no changes
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.20.1 → 2.21.4 no changes
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 no changes
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 no changes
-
2.18.0
2018-06-21
- 2.17.1 → 2.17.6 no changes
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
- 2.12.5 no changes
-
2.11.4
2017-09-22
- 2.10.5 no changes
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
- 2.5.6 no changes
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
- 2.2.3 no changes
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
BESKRIVNING
Integrera ändringar från ett fjärr-repo i den aktuella grenen.
Först kör git pull git fetch med samma argument (exklusive sammanslagningsalternativ) för att hämta fjärrgren(ar). Sedan bestämmer den vilken fjärrgren som ska integreras: om du kör git pull utan argument används som standard upstream för den aktuella grenen. Sedan integreras den grenen i den aktuella grenen.
Det finns fyra huvudalternativ för att integrera fjärrgrenen:
-
gitpull--ff-onlykommer bara att göra "snabbspola framåt"-uppdateringar: det misslyckas om din lokala gren har divergerat från fjärrgrenen. Detta är standardinställningen. -
gitpull--rebasekörgitrebase -
gitpull--no-rebasekörgitmerge. -
gitpull--squashkörgitmerge--squash
Du kan också ställa in konfigurationsalternativen pull.rebase, pull.squash eller pull.ff med ditt föredragna beteende.
Om det uppstår en sammanslagningskonflikt under sammanslagningen eller ombasering som du inte vill hantera, kan du säkert avbryta den med git merge --abort eller git rebase --abort.
ALTERNATIV
- <repo>
-
"Fjärr"-arkivet att hämta från. Detta kan antingen vara en URL (se avsnittet GIT URLS nedan) eller namnet på en fjärrenhet (se avsnittet FJÄRR nedan).
Standardinställningen är den konfigurerade uppströmsfilen för den aktuella grenen, eller
origin. Se UPPSTRÖMS-GRENAR nedan för mer information om hur man konfigurerar uppströmsfilar. - <refspec>
-
Vilken gren eller annan referens(er) som ska hämtas och integreras i den aktuella grenen, till exempel
mainigitpulloriginmain. Standardinställningen är den konfigurerade uppström för den aktuella grenen.Detta kan vara en gren, tagg eller annan samling av referenser. Se <refspec> nedan under "Alternativ relaterade till hämtning" för den fullständiga syntaxen, och STANDARDBETEENDE nedan för hur
gitpullanvänder detta argument för att avgöra vilken fjärrgren som ska integreras. -
-q -
--quiet -
Detta skickas till både underliggande git-fetch till kväva rapportering under överföring, och underliggande git-merge för att kväva-utdata under sammanslagning.
-
-v -
--verbose -
Skicka
--verbosetill git-fetch och git-merge. -
--recurse-submodules[=(yes|on-demand|no)] -
--no-recurse-submodules -
Det här alternativet styr om nya incheckningar för ifyllda undermoduler ska hämtas, och om de fungerande träden för aktiva undermoduler också ska uppdateras (se git-fetch[1], git-config[1] och gitmodules[5]).
Om utcheckningen görs via ombasering, ombaseras även lokala undermodul-incheckningar.
Om uppdateringen görs via sammanslagning, löses undermodulkonflikterna och de checkas ut.
Alternativ gällande sammanslagning
-
--commit -
--no-commit -
Utför sammanslagningen och spara resultatet. Det här alternativet kan användas för att åsidosätta
--no-commit. Endast användbart vid sammanslagning.Med
--no-commitutför du sammanslagnings-funktionen och stoppar den precis innan du skapar en sammanslagnings-incheckning, för att ge användaren en chans att granska och ytterligare justera sammanslagnings-resultatet innan den checkar in.Observera att snabbspolningsuppdateringar inte skapar en sammanslagins-incheckning och därför finns det inget sätt att stoppa dessa sammanslagningar med
--no-commit. Om du vill se till att din gren inte ändras eller uppdateras av sammanslagings-kommandot, använd--no-ffmed--no-commit. -
--edit -
-e -
--no-edit -
Anropa en editor innan den mekaniska sammanfogningen genomförs för att ytterligare redigera det automatiskt genererade sammanfogningsmeddelandet, så att användaren kan förklara och motivera sammanfogningen. Alternativet
--no-editkan användas för att acceptera det automatiskt genererade meddelandet (detta avråds generellt).Äldre skript kan bero på det historiska beteendet att inte tillåta användaren att redigera sammanslagningsloggmeddelandet. De kommer att se en editor öppen när de kör
gitmerge. För att göra det enklare att anpassa sådana skript till det uppdaterade beteendet kan miljövariabelnGIT_MERGE_AUTOEDITsättas tillnoi början av dem. -
--cleanup=<läge> -
Det här alternativet avgör hur sammanslagningsmeddelandet ska rensas innan det incheckas. Se git-commit[1] för mer information. Om <läge> dessutom ges värdet
scissors, kommer scissors att läggas till iMERGE_MSGinnan de skickas vidare till inchecknings-maskineriet i händelse av en sammanslagningskonflikt. -
--ff-only -
Uppdatera endast till den nya historiken om det inte finns någon avvikande lokal historik. Detta är standardinställningen när ingen metod för att stämma av avvikande historiker tillhandahålls (via flaggorna
--rebase). -
--ff -
--no-ff -
Vid sammanslagning snarare än ombasering, anger detta hur en sammanslagning hanteras när den sammanslagna historiken redan är en underordnad del av den aktuella historiken. Om sammanslagning begärs är
--ffstandardinställningen såvida inte en kommenterad (och eventuellt signerad) tagg som inte lagras på sin naturliga plats irefs/tags/-hierarkin sammanfogas, i vilket fall--no-ffantas.Med
--ff, lös när det är möjligt sammanslagningen som en snabbspolning framåt (uppdatera endast grenpekaren så att den matchar den sammanslagna grenen; skapa inte en merge-commit). När det inte är möjligt (när den sammanslagna historiken inte är en underordnad del av den aktuella historiken), skapa en sammanslagings-incheckning.Med
--no-ff, skapa en sammanslagings-incheckning i alla fall, även när merge istället skulle kunna lösas som en snabbspolning framåt. -
-S[<nyckel-id>] -
--gpg-sign[=<nyckel-id>] -
--no-gpg-sign -
GPG-signera den resulterande sammanslagningsincheckningen. Argumentet <nyckel-id> är valfritt och har som standard incheckare-identiteten; om det anges måste det fästas vid alternativet utan mellanslag.
--no-gpg-signär användbart för att negligera både konfigurationsvariabelncommit.gpgSignoch den tidigare--gpg-sign. -
--log[=<n>] -
--no-log -
Förutom grennamn, fyll i loggmeddelandet med enradsbeskrivningar från högst <n> faktiska incheckningar som sammanfogas. Se även git-fmt-merge-msg[1]. Endast användbart vid sammanslagning.
Med
--no-loglistas inte enradsbeskrivningar från de faktiska incheckningar som sammanfogas. -
--signoff -
--no-signoff -
Add a
Signed-off-bytrailer by the committer at the end of the commit log message. The meaning of a signoff depends on the project to which you’re committing. For example, it may certify that the committer has the rights to submit the work under the project’s license or agrees to some contributor representation, such as a Developer Certificate of Origin. (See https://developercertificate.org for the one used by the Linux kernel and Git projects.) Consult the documentation or leadership of the project to which you’re contributing to understand how the signoffs are used in that project.Alternativet
--no-signoffkan användas för att upphäva ett tidigare--signoff-alternativ på kommandoraden.Git har inte (och kommer inte ha) en konfigurationsvariabel för att aktivera kommandoradsalternativet
--signoffsom standard; secommit.signoff-posten i gitfaq[7] för mer information.
-
--stat -
-n -
--no-stat -
Visa en diffstat i slutet av sammanslagningen. Diffstat styrs också av konfigurationsalternativet merge.stat.
Med
-neller--no-statvisas ingen diffstat i slutet av sammanslagningen. -
--compact-summary -
Visa en kompakt sammanfattning när sammanslagningen är färdig.
-
--squash -
--no-squash -
Skapa arbetsträdet och indextillståndet som om en riktig sammanslagning hade skett (förutom sammanslagningsinformationen), men gör inte en faktisk incheckning, flytta inte
HEADeller registrera$GIT_DIR/MERGE_HEAD(för att få nästagitcommit-kommando att skapa en sammanslagnings-incheckning). Detta låter dig skapa en enda incheckning ovanpå den aktuella grenen vars effekt är densamma som att sammanfoga en annan gren (eller fler i fallet med en bläckfisk).Med
--no-squashutförs sammanslagningen och chacka-in resultatet. Detta alternativ kan användas för att åsidosätta--squash.Med
--squashär--commitinte tillåtet och kommer att misslyckas.Endast användbart vid sammanslagning.
-
--verify -
--no-verify -
Som standard, körs pre-merge- och commit-msg-krokarna. När
--no-verifyanges, kringgås dessa. Se även githooks[5]. Endast användbart vid sammanslagning. -
-s<strategi> -
--strategy=<strategi> -
Använd den givna sammanslagningsstrategin; kan anges mer än en gång för att ange dem i den ordning de ska provas. Om det inte finns något
-s-alternativ används en inbyggd lista med strategier istället (ortvid sammanslagning av en enskild rubrik,octopusannars). -
-X<alternativ> -
--strategy-option=<alternativ> -
Skicka det specifika alternativet för sammanslagningsstrategin vidare till sammanslagningsstrategin.
-
--verify-signatures -
--no-verify-signatures -
Verifiera att tip incheckningen för sidgrenen som sammanfogas är signerad med en giltig nyckel, d.v.s. en nyckel som har en giltig uid: i standardförtroendemodellen betyder detta att signeringsnyckeln har signerats av en betrodd nyckel. Om tip incheckningen för sidgrenen inte är signerad med en giltig nyckel avbryts sammanfogningen.
Endast användbart vid sammanslagning.
-
--summary -
--no-summary -
Synonymer till
--statoch--no-stat; dessa är föråldrade och kommer att tas bort i framtiden. -
--autostash -
--no-autostash -
Skapa automatiskt en tillfällig gömma-post innan operationen börjar, registrera den i referensen
MERGE_AUTOSTASHoch tillämpa den efter att operationen är avslutad. Det betyder att du kan köra operationen på ett smutsigt arbetsträd. Använd dock försiktigt: den slutliga gömma-applikationen efter en lyckad sammanslagning kan resultera i icke-triviala konflikter. -
Som standard vägrar
gitmerge-kommandot att slå samman historiker som inte delar en gemensam förfader. Det här alternativet kan användas för att åsidosätta denna säkerhetsåtgärd när man slår samman historiker för två projekt som startade sina liv oberoende av varandra. Eftersom det är ett mycket sällsynt fall finns ingen konfigurationsvariabel för att aktivera detta som standard, och kommer inte att läggas till.Endast användbart vid sammanslagning.
-
-r -
--rebase[=(true|merges|false|interactive)] -
-
true -
Ombasera den aktuella grenen ovanpå den uppströms grenen efter hämtning. Om det finns en fjärrspårningsgren som motsvarar den uppströms grenen och den uppströms grenen har ombaserats sedan den senaste hämtningen, använder ombasen den informationen för att undvika ombasering av icke-lokala ändringar. Detta är standardinställningen.
-
merges -
ombasering med
gitrebase--rebase-mergesså att de lokala sammanslagnings-incheckningar inkluderas i rebasen (se git-rebase[1] för detaljer). -
false -
sammanfoga den uppströms grenen med den nuvarande grenen.
-
interactive -
aktivera det interaktiva läget för ombasering.
Se
pull.rebase,branch.<name>.rebaseochbranch.autoSetupRebasei git-config[1] om du vill attgitpullalltid ska använda--rebaseistället för sammanslagning.+
NoteDetta är ett potentiellt farligt driftläge. Det skriver om historiken, vilket inte bådar gott när du redan har publicerat den historiken. Använd inte det här alternativet om du inte har läst git-rebase[1] noggrant. -
-
--no-rebase -
Detta är en förkortning för
--rebase=false.
Alternativ gällande hämtningar
-
--all -
--no-all -
Hämta ("fetcha") alla fjärrar, förutom de som har konfigurationsvariabeln
remote.<namn>.skipFetchAllangiven. Detta åsidosätter konfigurationsvariabelnfetch.all. -
-a -
--append -
Lägg till referensnamn och objektnamn för hämtade referenser till det befintliga innehållet i
.git/FETCH_HEAD. Utan detta alternativ kommer gammal data i.git/FETCH_HEADatt skrivas över. -
--atomic -
Använd en atomär transaktion för att uppdatera lokala referenser. Antingen uppdateras alla referenser, eller så uppdateras inga referenser vid fel.
-
--depth=<djup> -
Begränsa hämtningen till det angivna antalet incheckningar från toppen av varje fjärrgrenhistorik. Om hämtning sker till ett ytligt-repo (shallow) skapat av
gitclonemed alternativet--depth=<djup> (se git-clone[1]), fördjupa eller förkorta historiken till det angivna antalet incheckningar. Taggar för de fördjupade incheckningar hämtas inte. -
--deepen=<djup> -
Liknar
--depth, förutom att den anger antalet incheckningar från den aktuella ytliga gränsen istället för från toppen av varje fjärrgrenhistorik. -
--shallow-since=<datum> -
Fördjupa eller förkorta historiken för ett ytligt repo för att inkludera alla nåbara incheckningar efter <datum>.
-
--shallow-exclude=<ref> -
Fördjupa eller förkorta historiken för ett ytligt repo för att exkludera incheckningar som är åtkomliga från en specifik fjärrgren eller tagg. Det här alternativet kan anges flera gånger.
-
--unshallow -
Om käll-repot är komplett, konvertera ett ytligt repo till ett komplett, och ta bort alla begränsningar som ytliga repon medför.
Om käll-repot är ytligt, hämta så mycket som möjligt så att det aktuella repot har samma historik som käll-repot.
-
--update-shallow -
Som standard vid hämtning från ett ytligt repo, vägrar
gitfetchreferenser som kräver uppdatering av.git/shallow. Det här alternativet uppdaterar.git/shallowoch accepterar sådana referenser. -
--negotiation-tip=(<incheckning>|<glob>) -
Som standard, rapporterar Git incheckningar till servern som är nåbara från alla lokala referenser för att hitta gemensamma incheckningar i ett försök att minska storleken på den packfil som ska tas emot. Om detta anges kommer Git bara att rapportera incheckningar som är nåbara från de givna tipsen. Detta är användbart för att påskynda hämtningar när användaren vet vilken lokal referens som sannolikt har incheckningar gemensamt med den uppströms referens som hämtas.
Det här alternativet kan anges mer än en gång; om så är fallet kommer Git att rapportera incheckningar som är åtkomliga från vilken som helst av de givna incheckningar.
Argumentet till detta alternativ kan vara en glob på referensnamn, en ref eller (eventuellt förkortad) SHA-1 för en commit. Att ange en glob är liktydigt med att ange detta alternativ flera gånger, en för varje matchande referensnamn.
Se även konfigurationsvariablerna
fetch.negotiationAlgorithmochpush.negotiatesom är dokumenterade i git-config[1], och alternativet--negotiate-onlynedan. -
--negotiate-only -
Hämta ingenting från servern, och skriv istället ut de förfäder till den angivna
--negotiation-tip=-argumenten, som vi har gemensamt med servern.Detta är inkompatibelt med
--recurse-submodules=(yes|on-demand). Internt används detta för att implementera alternativetpush.negotiate, se git-config[1]. -
--dry-run -
Visa vad som skulle göras, utan att göra några ändringar.
-
--porcelain -
Skriv ut utdata till standardutdata i ett lätttolkat format för skript. Se avsnittet UTMATNING i git-fetch[1] för mer information.
Detta är inkompatibelt med
--recurse-submodules=(yes|on-demand) och har företräde framför konfigurationsalternativetfetch.output. -
-f -
--force -
När
gitfetchanvänds med <src>:<dst> refspec, kan den vägra att uppdatera den lokala grenen vilket diskuteras i <refspec>-delen av git-fetch[1]-dokumentationen. Det här alternativet åsidosätter den kontrollen. -
-k -
--keep -
Behåll hämtade paket.
-
--prefetch -
Ändra den konfigurerade refspec:en för att placera alla referenser i namnrymden
refs/prefetch/. Seprefetch-uppgiften i git-maintenance[1]. -
-p -
--prune -
Innan du hämtar, ta bort alla referenser till fjärrspårning som inte längre finns på fjärren. Taggar kan inte beskäras om de bara hämtas på grund av standardtaggens automatiska efterföljning eller på grund av ett
--tags-alternativ. Men om taggar hämtas på grund av en explicit refspec (antingen på kommandoraden eller i fjärrkonfigurationen, till exempel om fjärren klonades med alternativet--mirror), kan de också beskäras. Att ange--prune-tagsär en förkortning för att ange taggens refspec. -
--no-tags -
Som standard, hämtas och lagras taggar som pekar på objekt som laddas ner från fjärr-repot lokalt. Det här alternativet inaktiverar denna automatiska taggföljningen. Standardbeteendet för en fjärren kan anges med inställningen
remote.<namn>.tagOpt. Se git-config[1]. -
--refmap=<refspec> -
När du hämtar referenser som listas på kommandoraden, använd den angivna refspecen (kan anges mer än en gång) för att mappa referenserna till fjärrspårningsgrenar, istället för värdena för
remote.<name>.fetch-konfigurationsvariabler för fjärr-repot. Om du anger ett tomt <refspec> till alternativet--refmapignorerar Git de konfigurerade refspecs och förlitar sig helt på de refspecs som anges som kommandoradsargument. Se avsnittet om "Konfigurerade fjärrspårningsgrenar" för mer information. -
-t -
--tags -
Hämta alla taggar från fjärrkontrollen (dvs. hämta fjärrtaggar
refs/tags/*till lokala taggar med samma namn), utöver vad som annars skulle hämtas. Att använda det här alternativet ensamt utsätter inte taggar för beskärning, även om--pruneanvänds (även om taggar kan beskäras ändå om de också är destinationen för en explicit refspec; se--prune). -
-j<n> -
--jobs=<n> -
Parallellisera alla former av hämtning upp till <n> jobb åt gången.
Om alternativet
--multipleangavs kommer de olika fjärrar att hämtas parallellt. Om flera undermoduler hämtas kommer de att hämtas parallellt. För att styra dem oberoende av varandra, använd konfigurationsinställningarnafetch.parallelochsubmodule.fetchJobs(se git-config[1]).Vanligtvis är parallella rekursiva hämtningar och hämtningar från flera fjärrar snabbare. Som standard utförs hämtningar sekventiellt, inte parallellt.
-
--set-upstream -
Om fjärr hämtas korrekt, lägg till en uppströmsreferens (spårningsreferens), som används av argumentlösa git-pull[1] och andra kommandon. För mer information, se
branch.<namn>.mergeochbranch.<namn>.remotei git-config[1]. -
--upload-pack<upload-pack> -
När det anges, och repot att hämta från hanteras av
gitfetch-pack, skickas--exec=<upload-pack> till kommandot för att ange en icke-standardsökväg för kommandot som körs i andra änden. -
--progress -
Förloppsstatus rapporteras som standard i standardfelströmmen när den är kopplad till en terminal, såvida inte
-qanges. Denna flagga tvingar fram förloppsstatus även om standardfelströmmen inte dirigeras till en terminal. -
-o<alternativ> -
--server-option=<alternativ> -
Skicka den givna strängen till servern vid kommunikation med protokollversion 2. Den givna strängen får inte innehålla tecknet NUL eller LF. Serverns hantering av serveralternativ, inklusive okända, är serverspecifik. När flera
--server-option=<alternativ> anges skickas de alla till den andra sidan i den ordning som anges på kommandoraden. När ingen--server-option=<alternativ> anges från kommandoraden används istället värdena för konfigurationsvariabelnremote.<namn>.serverOption. -
--show-forced-updates -
Som standard kontrollerar git om en branch tvångsuppdateras under hämtning. Detta kan inaktiveras via
fetch.showForcedUpdates, men alternativet--show-forced-updatesgaranterar att denna kontroll sker. Se git-config[1]. -
--no-show-forced-updates -
Som standard kontrollerar git om en gren tvångsuppdateras under hämtning. Skicka
--no-show-forced-updateseller sättfetch.showForcedUpdatestill "false" för att hoppa över denna kontroll av prestandaskäl. Om det används undergit-pullkommer alternativet--ff-onlyfortfarande att kontrollera om det finns tvångsuppdateringar innan en snabbuppdatering försöker göras. Se git-config[1]. -
-4 -
--ipv4 -
Använd endast IPv4-adresser och ignorera IPv6-adresser.
-
-6 -
--ipv6 -
Använd endast IPv6-adresser och ignorera IPv4-adresser.
- <refspec>
-
Anger vilka referenser som ska hämtas och vilka lokala referenser som ska uppdateras. När inga <refspec>s visas på kommandoraden läses referenserna som ska hämtas från variablerna
remote.<repo>.fetchistället (se avsnittet "KONFIGURERADE FJÄRRSPÅRNINGSGRENAR" i git-fetch[1]).Formatet för en <refspec>-parameter är ett valfritt plustecken
+, följt av källtan <src>, följt av ett kolon:, följt av målet <dst>. Kolonet kan utelämnas när <mål> är tomt. <src> är vanligtvis en referens, eller ett globmönster med ett enda*som används för att matcha en uppsättning referenser, men det kan också vara ett fullständigt stavat hexagonalt objektnamn.En <refspec> kan innehålla ett
*i sin <src> för att indikera en enkel mönstermatchning. En sådan refspec fungerar som en glob som matchar vilken referens som helst med mönstret. En mönster <refspec> måste ha ett och endast ett*i både <src> och <mål>. Den mappar referenser till destinationen genom att ersätta*med innehållet som matchas från källan.Om en refspec har prefixet
^kommer den att tolkas som en negativ refspec. Istället för att ange vilka referenser som ska hämtas eller vilka lokala referenser som ska uppdateras, kommer en sådan refspec istället att ange referenser som ska exkluderas. En ref kommer att anses matcha om den matchar minst en positiv refspec och inte matchar någon negativ refspec. Negativa refspecs kan vara användbara för att begränsa omfattningen av en mönsterrefspec så att den inte inkluderar specifika referenser. Negativa refspecs kan själva vara mönsterrefspecs. De får dock bara innehålla en <src> och anger inte en <mål>. Fullständigt stavade hexadecimala objektnamn stöds inte heller.tag<tagg> betyder samma sak somrefs/tags/<tag>:refs/tags/<tagg>; den begär att allt upp till den givna taggen hämtas.Fjärrreferensen som matchar <src> hämtas, och om <mål> inte är en tom sträng görs ett försök att uppdatera den lokala referensen som matchar den.
Huruvida den uppdateringen är tillåten utan
--forceberor på referensnamnrymden den hämtas till, typen av objekt som hämtas och om uppdateringen anses vara en snabbspolning framåt. Generellt sett gäller samma regler för hämtning som vid pushing, se avsnittet <refspec>... i git-push[1] för vad dessa är. Undantag från dessa regler som är specifika förgitfetchanges nedan.Fram till Git version 2.20, och till skillnad från när man pushar med git-push[1], skulle alla uppdateringar till
refs/tags/*accepteras utan+i refspec (eller--force). Vid hämtning betraktade vi promiskuöst alla tagguppdateringar från en fjärren som tvångshämtningar. Sedan Git version 2.20 fungerar hämtning för att uppdaterarefs/tags/*på samma sätt som vid pushing. Dvs. alla uppdateringar kommer att avvisas utan+i refspec (eller--force).Till skillnad från när man pushar med git-push[1], kommer alla uppdateringar utanför
refs/{tags,heads}/*att accepteras utan+i refspec (eller--force), oavsett om det är att byta ut t.ex. ett trädobjekt mot en blob, eller en incheckning mot en annan incheckning som inte har den tidigare incheckning som en förfader etc.Till skillnad från när man pushar med git-push[1] finns det ingen konfiguration som ändrar dessa regler, och inget som en
pre-fetch-krok analog medpre-receive-kroken.Precis som med pushing med git-push[1], kan alla regler som beskrivs ovan om vad som inte är tillåtet som en uppdatering åsidosättas genom att lägga till ett valfritt inledande
+till en refspec (eller genom att använda kommandoradsalternativet--force). Det enda undantaget från detta är att ingen mängd tvång kommer att få namnrymdenrefs/heads/*att acceptera ett icke-inchecknings-objekt.NoteNär den fjärrgren du vill hämta är känd för att regelbundet spolas tillbaka och ombaseras, förväntas det att dess nya tips inte kommer att vara en underordnad av dess tidigare tips (som lagrats i din fjärrspårningsgren förra gången du hämtade). Du vill använda +-tecknet för att indikera att uppdateringar som inte är framåtspolade kommer att behövas för sådana grenar. Det finns inget sätt att avgöra eller deklarera att en gren kommer att göras tillgänglig i ett arkiv med detta beteende; den indragande ("pullande") användaren måste helt enkelt veta att detta är det förväntade användningsmönstret för en gren.NoteDet är skillnad på att lista flera <refspec> direkt på gitpull-kommandoraden och att ha fleraremote.<repo>.fetch-poster i din konfiguration för ett <repo> och att köra ettgitpull-kommando utan några explicita <refspec>-parametrar. <refspec>s som listas explicit på kommandoraden slås alltid samman med den aktuella grenen efter hämtning. Med andra ord, om du listar mer än en fjärrreferens, kommergitpullatt skapa en bläckfisk-sammanslagning. Å andra sidan, om du inte listar någon explicit <refspec>-parameter på kommandoraden, kommergitpullatt hämta alla <refspec>s som den hittar iremote.<repository>.fetch-konfigurationen och slå samman endast den första <refspec> som hittas med den aktuella grenen. Detta beror på att det sällan görs att skapa en bläckfisk från fjärrreferenser, medan det ofta är användbart att hålla reda på flera fjärrreferenser samtidigt genom att hämta mer än ett.
GIT URLS
I allmänhet innehåller URL:er information om transportprotokollet, adressen till fjärrservern och sökvägen till repot. Beroende på transportprotokollet kan en del av denna information saknas.
Git stöder ssh-, git-, http- och https-protokollen (dessutom kan ftp och ftps användas för hämtning, men detta är ineffektivt och föråldrat; använd dem inte).
Den inbyggda transporten (dvs. git:// URL) utför ingen autentisering och bör användas med försiktighet på osäkra nätverk.
Följande syntaxer kan användas med dem:
-
ssh://[<användare>@]<värd>[:<port>]/<sökväg-till-git-repo> -
git://<värd>[:<port>]/<sökväg-till-git-repo> -
http[s]://<värd>[:<port>]/<sökväg-till-git-repo> -
ftp[s]://<värd>[:<port>]/<sökväg-till-git-repo>
En alternativ scp-liknande syntax kan också användas med ssh-protokollet:
-
[<användare>
@]<värd>[:<port>]/<sökväg-till-git-repo>
Denna syntax känns bara igen om det inte finns några snedstreck före det första kolonet. Detta hjälper till att skilja en lokal sökväg som innehåller ett kolon. Till exempel kan den lokala sökvägen foo:bar anges som en absolut sökväg eller ./foo:bar för att undvika att misstolkas som en ssh-url.
Protokollen ssh och git stöder dessutom ~<username>-expansionen:
-
ssh://[<användare>@]<värd>[:<port>]/<sökväg-till-git-repo> -
git://[<användare>@]<värd>[:<port>]/<sökväg-till-git-repo> -
[<användare>
@]<värd>[:<port>]/<sökväg-till-git-repo>
För lokala repos, som också stöds nativt av Git, kan följande syntaxer användas:
-
/sokvag/till/repo.git/ -
file:///sokvag/till/repo.git/
Dessa två syntaxer är mestadels likvärdiga, förutom vid kloning, då den förra innebär alternativet --local. Se git-clone[1] för detaljer.
git clone, git fetch och git pull, men inte git push, accepterar också en lämplig bundle-fil. Se git-bundle[1].
När Git inte vet hur ett visst transportprotokoll ska hanteras, försöker det använda fjärr-hjälparen remote-<transport>, om en sådan finns. För att explicit begära en fjärr-hjälpare kan följande syntax användas:
-
<transport>
::<adress>
där <adress> kan vara en sökväg, en server och sökväg, eller en godtycklig URL-liknande sträng som känns igen av den specifika fjärrhjälparen som anropas. Se gitremote-helpers[7] för mer information.
Om det finns ett stort antal fjärrdatabaser med liknande namn och du vill använda ett annat format för dem (så att de URL:er du använder skrivs om till URL:er som fungerar), kan du skapa en konfigurationssektion i formatet:
[url "<faktisk-url-bas>"] insteadOf = <annan-url-bas>
Till exempel med detta:
[url "git://git.host.xz/"] insteadOf = host.xz:/sokvag/till/ insteadOf = arbete:
En URL som "arbete:repo.git" eller "host.xz:/sokvag/till/repo.git" kommer att skrivas om i alla sammanhang som antar att URL:en är "git://git.host.xz/repo.git".
Om du vill skriva om URL:er enbart för sändning (push), kan du skapa en konfigurationssektion i formen:
[url "<faktisk-url-bas>"] pushInsteadOf = <annan-url-bas>
Till exempel med detta:
[url "ssh://example.org/"] pushInsteadOf = git://example.org/
En URL som "git://example.org/path/to/repo.git" kommer att skrivas om till "ssh://example.org/path/to/repo.git" för sändning ("pushas"), men pulls kommer fortfarande att använda den ursprungliga URL:en.
FJÄRR
Namnet på en av följande kan användas istället för en URL som <repo> argument:
-
en fjärr i Git-konfigurationsfilen:
$GIT_DIR/config, -
a file in the
$GIT_DIR/remotesdirectory, or -
en fil i katalogen
$GIT_DIR/branches.
Alla dessa låter dig också utelämna refspec från kommandoraden eftersom de var och en innehåller en refspec som git kommer att använda som standard.
Namngiven fjärr i konfigurationsfilen
Du kan välja att ange namnet på en fjärren som du tidigare konfigurerat med hjälp av git-remote[1], git-config[1] eller till och med genom en manuell redigering av filen $GIT_DIR/config. URL:en för denna fjärrkontroll kommer att användas för att komma åt repot. Refspec:en för denna fjärrkontroll kommer att användas som standard när du inte anger en refspec på kommandoraden. Posten i konfigurationsfilen skulle se ut så här:
[remote "<name>"] url = <URL> pushurl = <pushurl> push = <refspec> fetch = <refspec>
<pushurl> används endast för sänding ("pusha"). Det är valfritt och standardvärdet är <URL>. Att säda till en fjärr påverkar alla definierade push-adresser eller alla definierade webbadresser om inga sänd-adresser (push) är definierade. Fetch hämtar dock bara från den först definierade webbadressen om flera webbadresser är definierade.
Namngiven fil i $GIT_DIR/remotes
Du kan välja att ange namnet på en fil i $GIT_DIR/remotes. URL:en i den här filen kommer att användas för att komma åt repot. Refspec:en i den här filen kommer att användas som standard när du inte anger en refspec på kommandoraden. Den här filen ska ha följande format:
URL: ett av ovanstående URL-format Push: <refspec> Pull: <refspec>
Push:-rader används av git push och Pull:-rader används av git pull och git fetch. Flera Push:- och Pull:-rader kan anges för ytterligare grenmappningar.
Namngiven fil i $GIT_DIR/branches
Du kan välja att ange namnet på en fil i $GIT_DIR/branches. URL:en i den här filen kommer att användas för att komma åt repot. Filen ska ha följande format:
<URL>#<huvud>
<URL> krävs; #<huvud> är valfritt.
Beroende på operationen, kommer git att använda en av följande refspecs, om du inte anger någon på kommandoraden. <gren> är namnet på den här filen i $GIT_DIR/branches och <huvud> har som standard master.
git fetch använder:
refs/heads/<huvud>:refs/heads/<gren>
git push använder:
HEAD:refs/heads/<huvud>
UPPSTRÖMS-GRENAR
Grenar i Git kan valfritt ha en uppströms fjärrgren. Git använder som standard uppströmsgrenen för fjärroperationer, till exempel:
-
Det är standardvärdet för
gitpullellergitfetchutan argument. -
It’s the default for
gitpushwith no arguments, with some exceptions. For example, you can use thebranch.<name>.pushRemoteoption to push to a different remote than you pull from, and by default withpush.default=simplethe upstream branch you configure must have the same name. -
Olika kommandon, inklusive
gitcheckoutochgitstatus, visar hur många incheckningar som har lagts till i din nuvarande grenen och upstream sedan du avgrenade från den, till exempel "Din branch och origin/main har divergerat och har 2 respektive 3 olika incheckningar".
Uppströmmen lagras i .git/config, i fälten "remote" och "merge". Till exempel, om main`s uppström är `origin/main:
[branch "main"] remote = origin merge = refs/heads/main
Du kan explicit ställa in en uppströmsgren med git push --set-upstream <fjärr> <gren> men Git kommer ofta automatiskt att ställa in uppströmsen åt dig, till exempel:
-
När du klonar ett repo kommer Git automatiskt att ställa in uppströmmen för standardgrenen.
-
Om du har konfigurationsalternativet
push.autoSetupRemoteaktiverat, kommergitpushautomatiskt att ställa in uppströmsen första gången du pushar en branch. -
Att checka ut en fjärrspårningsgren med
gitcheckout<gren> skapar automatiskt en lokal gren med det namnet och ställer in uppströmmen på den fjärranslutna grenen.
|
Note
|
Uppströms grenar kallas ibland för "spårningsinformation", som i "ange grenens spårningsinformation". |
SAMMANSLAGNINGSSTRATEGIER
Sammanfogningsmekanismen (kommandona git merge och git pull) gör det möjligt att välja bakända-sammanfogningsstrategier med alternativet -s. Vissa strategier kan också ta sina egna alternativ, vilka kan skickas genom att ge -X<alternativ>-argument till git merge och/eller git pull.
-
ort -
Detta är standardstrategin för sammanslagning när man drar in ("pulla") eller sammanfogar en gren. Denna strategi kan bara lösa två huvuden med hjälp av en 3-vägs sammanslagningsalgoritm. När det finns mer än en gemensam förfader som kan användas för 3-vägs sammanslagning skapas ett sammanslaget träd av de gemensamma förfäderna och används som referensträd för 3-vägs sammanslagningen. Detta har rapporterats resultera i färre sammanslagningskonflikter utan att orsaka felsammanslagningar, enligt tester gjorda på faktiska sammanslagningscommits hämtade från Linux 2.6-kärnans utvecklingshistorik. Dessutom kan denna strategi upptäcka och hantera sammanslagningar som involverar namnbyten. Den använder inte upptäckta kopior. Namnet på denna algoritm är en akronym ("Ostensibly Recursive’s Twin") och kommer från det faktum att den skrevs som en ersättning för den tidigare standardalgoritmen, "rekursiv".
I det fall där sökvägen är en undermodul, och undermodul-incheckningen som används på ena sidan av sammanslagnings-sekvensen är en underordnad undermodul-incheckning som används på den andra sidan av merge-sekvensen, försöker Git att snabbspola fram till underordnad. Annars kommer Git att behandla detta fall som en konflikt och föreslå som en lösning en undermodul-incheckningen som är underordnad de konflikterande, om en sådan finns.
ort-strategin kan ha följande alternativ:-
ours -
This option forces conflicting hunks to be auto-resolved cleanly by favoring our version. Changes from the other tree that do not conflict with our side are reflected in the merge result. For a binary file, the entire contents are taken from our side.
Detta bör inte förväxlas med
ourssammanslagningsstrategi, som inte ens tittar på vad det andra trädet innehåller alls. Den kasserar allt som det andra trädet gjorde och deklarerar att vår historia innehåller allt som hände i det. -
theirs -
Detta är motsatsen till
ours; observera att det, till skillnad frånours, inte finns någontheirs-sammanslagningsstrategi att förväxla detta sammanslagningsalternativ med. -
ignore-space-change -
ignore-all-space -
ignore-space-at-eol -
ignore-cr-at-eol -
Behandlar rader med den angivna typen av mellanslagsändring som oförändrade för en trevägssammanslagning. Ändringar av mellanslag blandade med andra ändringar på en rad ignoreras inte. Se även git-diff[1]
-b,-w,--ignore-space-at-eoloch--ignore-cr-at-eol.-
Om deras version bara introducerar ändringar av blanksteg på en rad används vår version;
-
Om vår version introducerar ändringar i blanksteg men deras version inkluderar en väsentlig ändring, används deras version;
-
Annars fortsätter sammanslagningen på vanligt sätt.
-
-
renormalize -
Detta kör en virtuell utcheckning och incheckning av alla tre stegen i alla filer som behöver en trevägssammanslagning. Det här alternativet är avsett att användas vid sammanslagning av grenar med olika rena filter eller normaliseringsregler för radslut. Se "Sammanfoga grenar med olika inchecknings-/utcheckningsattribut" i gitattributes[5] för mer information.
-
no-renormalize -
Inaktiverar alternativet
renormalize. Detta åsidosätter konfigurationsvariabelnmerge.renormalize. -
find-renames[=<n>] -
Aktivera namnbytesdetektering, och ställ in likhetströskeln om du vill. Detta är standardinställningen. Detta åsidosätter konfigurationsvariabeln
merge.renames. Se även git-diff[1]--find-renames. -
rename-threshold=<n> -
Föråldrad synonym för
find-renames=<n>. -
no-renames -
Stäng av namnbytesdetektering. Detta åsidosätter konfigurationsvariabeln
merge.renames. Se även git-diff[1]--no-renames. -
histogram -
Föråldrad synonym för
diff-algoritm=histogram. -
patience -
Föråldrad synonym för diff-algoritm=tålamod.
-
diff-algorithm=(histogram|minimal|myers|patience) -
Använd en annan diff-algoritm vid sammanfogning, vilket kan bidra till att undvika felsammanfogningar som uppstår på grund av oviktiga matchande rader (som klammerparenteser från olika funktioner). Se även git-diff[1]
--diff-algorithm. Observera attortsom standard hardiff-algorithm=histogram, medan vanliga diffs för närvarande har konfigurationsinställningendiff.algorithm. -
subtree[=<sökväg>] -
Det här alternativet är en mer avancerad form av "underträdsstrategi" (subtree), där strategin gissar hur två träd måste flyttas för att matcha varandra vid sammanslagning. Istället prefixeras den angivna sökvägen (eller tas bort från början) för att få formen på de två träden att matcha.
-
-
recursive -
Detta är nu en synonym för
ort. Det var en alternativ implementering fram till v2.49.0, men omdirigerades till att betydaorti v2.50.0. Den tidigare rekursiva strategin var standardstrategin för att lösa två huvuden från Git v0.99.9k till v2.33.0. -
resolve -
Detta kan bara lösa två huvuden (dvs. den aktuella grenen och en annan gren du hämtade från) med hjälp av en 3-vägs merge-algoritm. Den försöker noggrant upptäcka korsvisa sammanslagings-tvetydigheter. Den hanterar inte namnbyten.
-
octopus -
Detta löser fall med fler än två huvuden, men vägrar att göra en komplex sammanslagning som kräver manuell lösning. Det är främst avsett att användas för att paketera ämnesgrenhuvuden. Detta är standardsammanslagningsstrategin när man drar in ("pullar") eller sammanfogar mer än en gren.
-
ours -
Detta kan bara lösa två huvuden (dvs. den aktuella grenen och en annan gren du hämtade från) med hjälp av en 3-vägs sammanslagnings-algoritm. Den försöker noggrant upptäcka korsvisa sammanslagnings-tvetydigheter. Den hanterar inte namnbyten.
-
subtree -
Detta är en modifierad
ort-strategi. När träd A och B sammanfogas, och B motsvarar ett underträd till A, justeras B först för att matcha trädstrukturen för A, istället för att läsa träden på samma nivå. Denna justering görs också på det gemensamma förfader-trädet.
Med strategier som använder 3-vägssammanslagning (inklusive standardvärdet ort), om en ändring görs på båda grenarna, men senare återställs på en av grenarna, kommer den ändringen att finnas i det sammanslagna resultatet; vissa personer tycker att detta beteende är förvirrande. Det inträffar eftersom endast huvuden och sammanslagningsbasen beaktas när en sammanslagning utförs, inte de enskilda incheckningarna. Sammanslagningsalgoritmen betraktar därför den återställda ändringen som ingen ändring alls och ersätter den ändrade versionen istället.
STANDARDBETEENDE
Ofta använder man git pull utan att ange någon parameter. Traditionellt, har detta motsvarat att säga git pull origin. Men när konfigurationen branch.<namn>.remote finns på grenen <namn>, används det värdet istället för origin.
För att avgöra vilken URL som ska användas för att hämta från, konsulteras värdet för konfigurationen remote.<fjärr>.url och om det inte finns någon sådan variabel används värdet på raden URL: i $GIT_DIR/remotes/<fjärr>.
För att avgöra vilka fjärrgrenar som ska hämtas (och eventuellt lagras i fjärrspårningsgrenarna) när kommandot körs utan några refspec-parametrar på kommandoraden, konsulteras värden för konfigurationsvariabeln remote.<fjärr>.fetch, och om det inte finns några konsulteras $GIT_DIR/remotes/<fjärr> och dess Pull:-rader används. Förutom refspec-formaten som beskrivs i avsnittet OPTIONS kan du ha en globbing-refspec som ser ut så här:
refs/heads/*:refs/remotes/origin/*
En globbande refspec måste ha en icke-tom RHS (dvs. måste lagra det som hämtades i fjärrspårningsgrenar), och dess LHS och RHS måste sluta med /*. Ovanstående anger att alla fjärrgrenar spåras med hjälp av fjärrspårningsgrenar i refs/remotes/origin/-hierarkin under samma namn.
Regeln för att avgöra vilken fjärrgren som ska sammanfogas efter hämtning är lite invecklad för att inte bryta bakåtkompatibiliteten.
Om explicita refspecs angavs på kommandoraden för git pull, slås de alla samman.
När ingen refspec angavs på kommandoraden använder git pull refspec från konfigurationen eller $GIT_DIR/remotes/<fjärr>. I sådana fall gäller följande regler:
-
Om konfigurationen
branch.<namn>.mergeför den aktuella branch <namn> finns, är det namnet på branchen på den fjärrplats som slås samman. -
Om refspecifikationen är en globbing-specifikation slås ingenting samman.
-
Annars slås den fjärrgrenen av den första refspecifikationen samman.
EXEMPEL
-
Uppdatera grenarna för fjärrspårning för det repo du klonade från, och sammanfoga sedan en av dem med din nuvarande gren:
$ git pull $ git pull origin
Normalt sett är den sammanslagna grenen
HEADför fjärrarkivet, men valet bestäms av alternativenbranch.<name>.remoteochbranch.<name>.merge; se git-config[1] för detaljer. -
Sammanfoga den fjärrstyrda grenen
nextmed den aktuella grenen:$ git pull origin next
Detta lämnar en kopia av
nexttillfälligt iFETCH_HEADoch uppdaterar fjärrspårningsgrenenorigin/next. Detsamma kan göras genom att anropa fetch och merge:$ git fetch origin $ git merge origin/next
If you tried a pull which resulted in complex conflicts and would want to start over, you can recover with git reset.
SÄKERHET
Protokollen för hämtning (fetch) och sänd ("pusha") är inte utformade för att förhindra att en sida stjäl data från det andra repot som inte var avsedda att delas. Om du har privata data som du behöver skydda från en skadlig motpart är det bästa alternativet att lagra dem i ett annat repo. Detta gäller både klienter och servrar. Namnrymder på en server är särskilt inte effektiva för läsåtkomstkontroll; du bör bara bevilja läsåtkomst till ett namnrymd till klienter som du skulle anförtro läsåtkomst till hela repot.
De kända attackvektorerna är följande:
-
Offret skickar "har"-rader som annonserar ID:n för objekt som det har som inte uttryckligen är avsedda att delas men som kan användas för att optimera överföringen om motparten också har dem. Angriparen väljer ett objekt-ID X att stjäla och skickar en referens till X, men är inte skyldig att skicka innehållet i X eftersom offret redan har det. Nu tror offret att angriparen har X, och skickar tillbaka innehållet i X till angriparen senare. (Denna attack är enklast för en klient att utföra på en server, genom att skapa en referens till X i namnrymden som klienten har tillgång till och sedan hämta den. Det mest troliga sättet för en server att utföra den på en klient är att "sammanfoga" X till en offentlig gren och hoppas att användaren gör ytterligare arbete på denna gren och skickar tillbaka den till servern utan att märka sammanfogningen.)
-
Precis som i punkt 1 väljer angriparen ett objekt-ID X att stjäla. Offret skickar ett objekt Y som angriparen redan har, och angriparen påstår falskeligen att ha X och inte Y, så offret skickar Y som ett delta mot X. Deltat avslöjar regioner av X som liknar Y för angriparen.
BUGGAR
Att använda --recurse-submodules kan bara hämta nya incheckningar i redan utcheckade undermoduler just nu. När t.ex. upstream lägger till en ny undermodul i de just hämtade incheckningar i superprojektet kan inte själva undermodulen hämtas, vilket gör det omöjligt att checka ut den undermodulen senare utan att behöva göra en hämtning (fetch) igen. Detta förväntas bli åtgärdat i en framtida Git-version.
GIT
En del av git[1]-sviten