Git
Syntax för Git-revisioner
Sök…
Anmärkningar
Många Git-kommandon tar revisionsparametrar som argument. Beroende på kommandot anger de ett specifikt engagemang eller, för kommandon som går revisionsgrafen (som git-log (1) ), alla åtaganden som kan nås från det åtagandet. De benämns vanligtvis <commit>
, eller <rev>
eller <revision>
i syntaxbeskrivningen.
Referensdokumentationen för syntax av Git-revisioner är gitrevisions (7) -sidan.
Fortfarande saknas från denna sida:
- [_] Output från
git describe
t.ex.v1.7.4.2-679-g3bee7fb
- [_]
@
ensam som en genväg förHEAD
- [_]
@{-<n>}
, t.ex.@{-1}
, och-
betyder@{-1}
- [_]
<branchname>@{push}
- [_]
<rev>^@
, för alla föräldrar till<rev>
Behöver separat dokumentation:
- [_] Med hänvisning till klatter och träd i förvaret och i indexet:
<rev>:<path>
och:<n>:<path>
syntax - [_] Revision varierar som
A..B
,A...B
,B ^A
,A^1
, och revision begränsar som-<n>
,--since
Ange revidering efter objektnamn
$ git show dae86e1950b1277e545cee180551750029cfe735
$ git show dae86e19
Du kan ange revision (eller i själva verket vilket objekt som helst: tagg, träd dvs kataloginnehåll, blob dvs filinnehåll) med SHA-1-objektnamn, antingen hexadecimal sträng med 40 byte, eller en substring som är unik för förvaret.
Symboliska ref-namn: grenar, taggar, fjärrspårande grenar
$ git log master # specify branch
$ git show v1.0 # specify tag
$ git show HEAD # specify current branch
$ git show origin # specify default remote-tracking branch for remote 'origin'
Du kan ange revision med ett symboliskt ref-namn, som inkluderar grenar (till exempel 'master', 'next', 'maint'), taggar (till exempel 'v1.0', 'v0.6.3-rc2'), remote- spåra grenar (till exempel 'origin', 'origin / master') och specialreferenser som 'HEAD' för nuvarande filial.
Om det symboliska ref-namnet är tvetydigt, till exempel om du har både gren och tagg med namnet 'fix' (att inte ha filial och tagg med samma namn rekommenderas inte), måste du ange vilken typ av ref du vill använda:
$ git show heads/fix # or 'refs/heads/fix', to specify branch
$ git show tags/fix # or 'refs/tags/fix', to specify tag
Standardversionen: HEAD
$ git show # equivalent to 'git show HEAD'
'HEAD' namnger de åtaganden som du baserade ändringarna i arbetsträdet och är vanligtvis det symboliska namnet för den nuvarande grenen. Många (men inte alla) kommandon som tar revisionsparameter som standard är "HEAD" om det saknas.
Reflogreferenser: @ { }
$ git show @{1} # uses reflog for current branch
$ git show master@{1} # uses reflog for branch 'master'
$ git show HEAD@{1} # uses 'HEAD' reflog
En ref, vanligtvis en gren eller HEAD, följt av suffixet @
med en ordinär specifikation bifogad i ett stagpar (t.ex. {1}
, {15}
) specificerar det nionde tidigare värdet för den ref i ditt lokala arkiv . Du kan kontrollera de senaste inloggningsuppgifterna med git reflog
kommandot, eller - --walk-reflogs
/ -g
att git log
.
$ git reflog
08bb350 HEAD@{0}: reset: moving to HEAD^
4ebf58d HEAD@{1}: commit: gitweb(1): Document query parameters
08bb350 HEAD@{2}: pull: Fast-forward
f34be46 HEAD@{3}: checkout: moving from af40944bda352190f05d22b7cb8fe88beb17f3a7 to master
af40944 HEAD@{4}: checkout: moving from master to v2.6.3
$ git reflog gitweb-docs
4ebf58d gitweb-docs@{0}: branch: Created from master
Obs : använda refloggar som praktiskt taget ersattes av äldre mekanism för att använda ORIG_HEAD
ref (ungefär motsvarande HEAD@{1}
).
Reflogreferenser: @ { }
$ git show master@{yesterday}
$ git show HEAD@{5 minutes ago} # or HEAD@{5.minutes.ago}
En ref följt av suffixet @
med en datumspecifikation bifogad i ett parpar (t.ex. {yesterday}
, {1 month 2 weeks 3 days 1 hour 1 second ago}
eller {1979-02-26 18:30:00}
) specificerar värdet på ref vid en tidigare tidpunkt (eller närmast punkt till den). Observera att detta letar upp tillståndet för din lokala ref vid en viss tidpunkt; till exempel vad som var i din lokala "master" -gren förra veckan.
Du kan använda git reflog
med en git reflog
att leta upp exakt tid där du gjorde något för att ge en ref i det lokala förvaret.
$ git reflog HEAD@{now}
08bb350 HEAD@{Sat Jul 23 19:48:13 2016 +0200}: reset: moving to HEAD^
4ebf58d HEAD@{Sat Jul 23 19:39:20 2016 +0200}: commit: gitweb(1): Document query parameters
08bb350 HEAD@{Sat Jul 23 19:26:43 2016 +0200}: pull: Fast-forward
Spårad / uppströms gren: @{uppströms}
$ git log @{upstream}.. # what was done locally and not yet published, current branch
$ git show master@{upstream} # show upstream of branch 'master'
Suffixet @{upstream}
bifogas ett grenamn (kort formulär <branchname>@{u}
) hänvisar till den gren som grenen som anges av filialnamn är inställd att byggas ovanpå (konfigurerad med branch.<name>.remote
och branch.<name>.merge
, eller med git branch --set-upstream-to=<branch>
). Ett saknat grennamn är som standard det nuvarande.
Tillsammans med syntax för revisionsområden är det mycket användbart att se vilka åtaganden din filial är före uppströms (åtaganden i ditt lokala förvar ännu inte finns uppströms), och vilka åtaganden du står bakom (åtaganden i uppströms inte slås samman till lokal filial), eller både:
$ git log --oneline @{u}..
$ git log --oneline ..@{u}
$ git log --oneline --left-right @{u}... # same as ...@{u}
Engagera förfäderkedjan: ^, ~ , etc.
$ git reset --hard HEAD^ # discard last commit
$ git rebase --interactive HEAD~5 # rebase last 4 commits
Ett suffix ^
till en revisionsparameter betyder den första föräldern till det åtagandeobjektet. ^<n>
betyder <n> -te föräldern (dvs. <rev>^
motsvarar <rev>^1
).
Ett suffix ~<n>
till en revisionsparameter betyder det commit-objekt som är <n> -en generationens förfader till det namngivna commit-objektet, som bara följer de första föräldrarna. Detta betyder att till exempel <rev>~3
motsvarar <rev>^^^
. Som en genväg, <rev>~
organ <rev>~1
, och är ekvivalent med <rev>^1
, eller <rev>^
i kort.
Denna syntax är komponerbar.
För att hitta sådana symboliska namn kan du använda kommandot git name-rev
:
$ git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a
33db5f4d9027a10e477ccf054b2c1ab94f74c85a tags/v0.99~940
Observera att - --pretty=oneline
och inte - --oneline
måste användas i följande exempel
$ git log --pretty=oneline | git name-rev --stdin --name-only
master Sixth batch of topics for 2.10
master~1 Merge branch 'ls/p4-tmp-refs'
master~2 Merge branch 'js/am-call-theirs-theirs-in-fallback-3way'
[...]
master~14^2 sideband.c: small optimization of strbuf usage
master~16^2 connect: read $GIT_SSH_COMMAND from config file
[...]
master~22^2~1 t7810-grep.sh: fix a whitespace inconsistency
master~22^2~2 t7810-grep.sh: fix duplicated test name
Dereferencing grenar och taggar: ^ 0, ^ { }
I vissa fall beror beteendet på ett kommando på om det ges grennamn, taggnamn eller en godtycklig revision. Du kan använda "de-referencing" -syntax om du behöver det senare.
Ett suffix ^
följt av ett objekttypnamn ( tag
, commit
, tree
, blob
) inneslutet i stagpar (till exempel v0.99.8^{commit}
) betyder att du ändrar objektet vid <rev>
rekursivt tills ett objekt av typen <type>
hittas eller så kan objektet inte längre avskaffas. <rev>^0
är en kort hand för <rev>^{commit}
.
$ git checkout HEAD^0 # equivalent to 'git checkout --detach' in modern Git
Ett suffix ^
följt av ett tomt stagpar (till exempel v0.99.8^{}
) betyder att ta bort taggen rekursivt tills ett objekt som inte är taggat hittas.
Jämföra
$ git show v1.0
$ git cat-file -p v1.0
$ git replace --edit v1.0
med
$ git show v1.0^{}
$ git cat-file -p v1.0^{}
$ git replace --edit v1.0^{}
Yngsta matchning begå: ^ {/ },: /
$ git show HEAD^{/fix nasty bug} # find starting from HEAD
$ git show ':/fix nasty bug' # find starting from any branch
En kolon (' :
'), följt av en snedstreck (' /
'), följt av en text, namnger ett engagemang vars åtkomstmeddelande matchar det angivna reguljära uttrycket. Detta namn returnerar det yngsta matchande åtagandet som kan nås från alla ref. Det vanliga uttrycket kan matcha vilken som helst del av åtagandemeddelandet. För att matcha meddelanden som börjar med en sträng kan man använda t.ex :/^foo
. Den speciella sekvensen :/!
är reserverat för modifierare till det som matchas. :/!-foo
spelar en negativ match, medan :/!!foo
matchar en bokstavlig! karaktär, följt av foo
.
Ett suffix ^
till en revisionsparameter, följt av ett stagpar som innehåller en text ledd av en snedstreck, är densamma som :/<text>
syntaxen nedan att det returnerar det yngsta matchande åtagandet som kan nås från <rev>
innan ^
.