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.54.0
2026-04-20
-
2.53.0
2026-02-02
-
2.52.0
2025-11-17
-
2.51.2
2025-10-27
- 2.51.1 no changes
-
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.45.1 → 2.47.3 no changes
-
2.45.0
2024-04-29
- 2.43.3 → 2.44.4 no changes
-
2.43.2
2024-02-13
- 2.43.1 no changes
-
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.39.1 → 2.39.5 no changes
-
2.39.0
2022-12-12
- 2.38.1 → 2.38.5 no changes
-
2.38.0
2022-10-02
- 2.37.1 → 2.37.7 no changes
-
2.37.0
2022-06-27
- 2.36.1 → 2.36.6 no changes
-
2.36.0
2022-04-18
- 2.35.1 → 2.35.8 no changes
-
2.35.0
2022-01-24
- 2.33.3 → 2.34.8 no changes
-
2.33.2
2022-03-23
-
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.1 → 2.26.3 no changes
-
2.25.0
2020-01-13
- 2.18.1 → 2.24.4 no changes
-
2.18.0
2018-06-21
- 2.13.7 → 2.17.6 no changes
-
2.12.5
2017-09-22
- 2.1.4 → 2.11.4 no changes
-
2.0.5
2014-12-17
SYNOPSIS
git shortlog [<flaggor>] [<revision-omfång>] [[--] <sökväg>…​] git log --pretty=short | git shortlog [<flaggor>]
BESKRIVNING
Sammanfattar utdata från git log i ett format som är lämpligt för inkludering i utgivningsmeddelanden. Varje incheckning grupperas efter författare och titel.
Dessutom kommer "[PATCH]" att tas bort från incheckningsbeskrivningen.
Om inga revisioner skickas på kommandoraden och antingen standardinmatningen inte är en terminal eller om det inte finns någon aktuell gren, kommer git shortlog att mata ut en sammanfattning av loggen som lästs från standardinmatningen, utan referens till det aktuella kodförrådet.
ALTERNATIV
- -n
- --numbered
-
Sortera utdata efter antal incheckningar per författare i stället för författarens alfabetiska ordning.
- -s
- --summary
-
Undertryck incheckningsbeskrivningen och ge endast en sammanfattning av antalet incheckningar.
- -e
-
Visa e-postadress för varje författare.
- --format[=<format>]
-
I stället för incheckningsrubriken, använd annan information för att beskriva varje incheckning. <format> kan vara vilken sträng som helst som accepteras av
--format-alternativet i git log, till exempel * [%h] %s. (Se avsnittet "VACKRA FORMAT" i git-log[1].)Varje vackert utskriven incheckning kommer att ompaketeras innan den visas.
- --date=<format>
-
Visa datum formaterade enligt den givna datumsträngen. (Se alternativet
--datei avsnittet "Incheckningsformatering" i git-log[1]). Användbart med--group=format:<format>. - --group=<typ>
-
Gruppincheckningar baserade på <typ>. Om inget
--group-alternativ anges är standardvärdetauthor. <typ> är en av:-
author, incheckningar grupperas efter författare -
incheckare, incheckningar grupperas efter incheckare (samma som-c) -
trailer:<fält>, <fält> tolkas som en trailer för incheckningsmeddelanden som inte är skiftlägeskänslig (se git-interpret-trailers[1]). Om ditt projekt till exempel använder trailers förReviewed-bykanske du vill se vem som har granskat medgitshortlog-ns--group=trailer:reviewed-by.Observera att incheckningar som inte inkluderar slutraden inte kommer att räknas. Likaså kan incheckningar med flera slutrader (t.ex. flera signoffs) räknas mer än en gång (men bara en gång per unikt slutradsvärde i den incheckningen).
Shortlog kommer att försöka tolka varje slutradsvärde som en
name<mejl>-identitet. Om det lyckas tillämpas e-postmappningen och e-postadressen utelämnas om inte alternativet--emailanges. Om värdet inte kan tolkas som en identitet kommer det att tas bokstavligt och fullständigt. -
format:<format>, vilken sträng som helst som accepteras av--format-alternativet i git log. (Se avsnittet "VACKRA FORMAT" i git-log[1].)
Om
--groupanges flera gånger räknas incheckningar under varje värde (men återigen, bara en gång per unikt värde i den incheckningen). Till exempel räknargitshortlog--group=author--group=trailer:co-authored-bybåde författare och medförfattare. -
- -c
- --committer
-
Detta är ett alias för
--group=committer. - -w[<bredd>[,<indent1>[,<indent2>]]]
-
Radbryt utdata genom att radbryta varje rad vid
bredd. Den första raden i varje post är indenterad medindent1-mellanslag, och den andra och efterföljande raderna är indenterade medindent2-mellanslag.width,indent1ochindent2är som standard 76, 6 respektive 9.Om bredden är
0(noll) dra då in raderna i utdata utan att radbryta dem. - <revisionsintervall>
-
Visa endast incheckningar inom det angivna revisionsintervallet. När inget <revisionsintervall> anges används som standard
HEAD(d.v.s. hela historiken som leder till den aktuella incheckningen).origin..HEADanger alla incheckningar som är åtkomliga från den aktuella incheckningen (d.v.s.HEAD), men inte frånorigin. För en komplett lista över sätt att stava <revisionsintervall>, se avsnittet "Ange intervall" i gitrevisions[7]. - [--] <sökväg>…​
-
Betrakta endast incheckningar som är tillräckliga för att förklara hur filerna som matchar de angivna sökvägarna kom till.
Sökvägar kan behöva prefixas med
--för att separera dem från alternativ eller revisionsintervallet, när förvirring uppstår.
Begränsning av incheckningar
Förutom att ange ett intervall av incheckningar som ska listas med hjälp av de speciella notationer som förklaras i beskrivningen kan ytterligare begränsningar av incheckningar tillämpas.
Att använda fler alternativ begränsar generellt sett utdata ytterligare (t.ex. --since=<datum1> begränsar till incheckningar nyare än <datum1>, och att använda det med --grep=<mönster> begränsar ytterligare till incheckningar vars loggmeddelande har en rad som matchar <mönster>), om inget annat anges.
Observera att dessa tillämpas före alternativ för incheckningsordning och formatering, såsom --reverse.
-
-<nummer> -
-n<nummer> -
--max-count=<nummer> -
Begränsa utdata till <nummer> incheckningar.
-
--skip=<nummer> -
Hoppa över <nummer> incheckningar innan incheckningsutdata visas.
-
--since=<datum> -
--after=<datum> -
Visa incheckningar som är nyare än <datum>.
-
--since-as-filter=<datum> -
Visa alla incheckningar som är nyare än <datum>. Detta besöker alla incheckningar i intervallet, i stället för att stanna vid den första incheckningen som är äldre än <datum>.
-
--until=<datum> -
--before=<datum> -
Visa incheckningar äldre än <datum>.
-
--author=<mönster> -
--committer=<mönster> -
Begränsa utdata för incheckningar till de med författar/incheckare-huvud-rader som matchar det reguljära uttrycket <mönster>. Med mer än ett
--author=<mönster> väljs incheckningar vars författare matchar någon av <mönster> (på samma sätt för flera--committer=<mönster>). -
--grep-reflog=<mönster> -
Begränsa utdata för incheckningar till de med reflog-poster som matchar det reguljära uttrycket <mönster>. Med mer än ett
--grep-reflogväljs incheckningar vars reflog-meddelande matchar något av de givna mönstren. Det är ett fel att använda det här alternativet om inte--walk-reflogsanvänds. -
--grep=<mönster> -
Begränsa utdata för incheckningar till de med ett loggmeddelande som matchar det reguljära uttrycket <mönster>. Med mer än ett
--grep=<mönster> väljs incheckningar vars meddelande matchar någon av <mönster> (men se--all-match).När
--notesär i kraft, matchas meddelandet från anteckningar som om det vore en del av loggmeddelandet. -
--all-match -
Begränsa utdata till de incheckningar som matchar alla givna
--grep, i stället för de som matchar minst en. -
--invert-grep -
Begränsa utdata till de incheckningar med ett loggmeddelande som inte matchar <mönster> som anges med
--grep=<mönster>. -
-i -
--regexp-ignore-case -
Matcha de reguljära uttrycks begränsande mönstren utan hänsyn till gemener och versaler.
-
--basic-regexp -
Betrakta de begränsande mönstren som grundläggande reguljära uttryck; detta är standardinställningen.
-
-E -
--extended-regexp -
Behandla de begränsande mönstren som utökade reguljära uttryck i stället för de grundläggande reguljära standarduttrycken.
-
-F -
--fixed-strings -
Betrakta de begränsande mönstren som fasta strängar (tolka inte mönster som ett reguljärt uttryck).
-
-P -
--perl-regexp -
Betrakta de begränsande mönstren som Perl-kompatibla reguljära uttryck.
Stöd för den här typen av reguljära uttryck är ett valfritt kompilerings-tids beroende. Om Git inte kompilerades med stöd för dem kommer det att dö om det här alternativet anges.
-
--remove-empty -
Stanna när en given sökväg försvinner från trädet.
-
--merges -
Skriv bara ut sammanslagningsincheckningar. Detta är exakt samma sak som
--min-parents=2. -
--no-merges -
Skriv inte ut incheckningar med mer än en förälder. Detta är exakt samma sak som
--max-parents=1. -
--min-parents=<nummer> -
--max-parents=<nummer> -
--no-min-parents -
--no-max-parents -
Visa bara incheckningar som har minst (eller högst) så många föräldraincheckningar. I synnerhet är
--max-parents=1samma sak som--no-merges, och--min-parents=2samma sak som--merges.--max-parents=0ger alla rotincheckningar och--min-parents=3alla bläckfisksammanslagningar.--no-min-parentsoch--no-max-parentsåterställer dessa gränser (till ingen gräns) igen. Motsvarande former är--min-parents=0(alla incheckningar har 0 eller fler föräldrar) och--max-parents=-1(negativa tal betyder ingen övre gräns). -
--first-parent -
När du letar efter incheckningar att inkludera, följ bara den första föräldraincheckningen när du stöter på en sammanslagningsincheckning. Det här alternativet kan ge bättre överblick när du granskar utvecklingen av en viss ämnesgren, eftersom sammanslagningar till en ämnesgren ofta bara handlar om att anpassa sig till uppdateringar uppströms, och då kan du ignorera de enskilda incheckningar som en sådan sammanslagning för in i historiken.
-
--exclude-first-parent-only -
När du letar efter incheckningar att exkludera (med ^), följ bara den första föräldraincheckningen när du stöter på en sammanslagningsincheckning. Detta kan användas för att hitta mängden ändringar i en ämnesgren från punkten där den avvek från fjärrgrenen, givet att godtyckliga sammanslagningar kan vara giltiga ändringar i ämnesgrenen.
-
--maximal-only -
Restrict the output commits to be those that are not reachable from any other commits in the revision range.
-
--not -
Vänder betydelsen av prefixet ^ (eller avsaknaden av det) för alla efterföljande revisionsspecifikationer, upp till nästa
--not. När det används på kommandoraden före --stdin, kommer revisionerna som skickas via stdin inte att påverkas av det. Omvänt, när det skickas via standardindata, kommer revisionerna som skickas på kommandoraden inte att påverkas av det. -
--all -
Låtsas som om alla referenser i
refs/, tillsammans medHEAD, listas på kommandoraden som <incheckning>. -
--branches[=<mönster>] -
Låtsas som om alla referenser i
refs/headslistas på kommandoraden som <incheckning>. Om <mönster> anges, begränsa grenar till de som matchar given shell-glob. Om <mönster> saknar ?, * eller [, antyds /* i slutet. -
--tags[=<mönster>] -
Låtsas som om alla referenser i
refs/tagslistas på kommandoraden som <incheckning>. Om <mönster> anges, begränsa taggarna till de som matchar den givna shell-globen. Om mönstret saknar ?, * eller [, antyds /* i slutet. -
--remotes[=<mönster>] -
Låtsas som om alla referenser i
refs/remoteslistas på kommandoraden som <incheckning>. Om <mönster> anges, begränsas fjärrspårade grenar till de som matchar given shell-glob. Om mönstret saknar ?, * eller [, antyds /* i slutet. -
--glob=<glob-mönster> -
Låtsas som om alla referenser som matchar skalglob <glob-mönster> listas på kommandoraden som <incheckning>. Inledande refs/ läggs automatiskt till om det saknas. Om mönstret saknar ?, * eller [, antyds /* i slutet.
-
--exclude=<glob-mönster> -
Inkludera inte referenser som matchar <glob-mönster> och som nästa
--all,--branches,--tags,--remoteseller--globannars skulle ta med. Upprepningar av detta alternativ ackumulerar exkluderingsmönster fram till nästa--all,--branches,--tags,--remoteseller--glob(andra alternativ eller argument nollställer inte de ackumulerade mönstren).Mönstren som anges ska inte börja med
refs/heads,refs/tagsellerrefs/remotesnär de tillämpas på--branches,--tagsrespektive--remotes, och de måste börja medrefs/när de tillämpas på--globeller--all. Om ett efterföljande /* är avsett måste det anges explicit. -
Inkludera inte referenser som skulle döljas av
git-fetch,git-receive-packellergit-upload-packenligt konfigurationenfetch.hideRefs,receive.hideRefselleruploadpack.hideRefstillsammans medtransfer.hideRefs(se git-config[1]). Detta alternativ påverkar nästa pseudo-ref-alternativ--alleller--globoch nollställs efter att de har behandlats. -
--reflog -
Låtsas som om alla objekt som nämns av refloggar listas på kommandoraden som <incheckning>.
-
--alternate-refs -
Låtsas som om alla objekt som nämns som referens-toppar för alternativa kodförråd listades på kommandoraden. Ett alternativt kodförråd är vilket kodförråd som helst vars objektkatalog är angiven i
objects/info/alternates. Uppsättningen av inkluderade objekt kan modifieras avcore.alternateRefsCommand, etc. Se git-config[1]. -
--single-worktree -
Som standard granskas alla arbetsträd av följande alternativ när det finns fler än ett (se git-worktree[1]):
--all,--reflogoch--indexed-objects. Detta alternativ tvingar dem att endast granska det aktuella arbetsträdet. -
--ignore-missing -
När ett ogiltigt objektnamn förekommer i indata, låtsas som om den felaktiga inmatningen inte angavs.
-
--bisect -
Låtsas som om den felaktiga halverings-referensen
refs/bisect/badlistades och som om den följdes av--notoch den bra halverings-referensenrefs/bisect/good-*på kommandoraden. -
--stdin -
Förutom att hämta argument från kommandoraden, läs dem även från standardinmatning. Detta accepterar incheckningar och pseudo-alternativ som
--alloch--glob=. När en---avgränsare setts, behandlas följande inmatning som sökvägar och används för att begränsa resultatet. Flaggor som--notsom läses via standardinmatning respekteras endast för argument som skickas på samma sätt och kommer inte att påverka några efterföljande kommandoradsargument. -
--cherry-mark -
Liksom
--cherry-pick(se nedan) men markera motsvarande incheckningar med=i stället för att utelämna dem, och ojämlika med+. -
--cherry-pick -
Utelämna alla incheckningar som introducerar samma förändring som en annan incheckning på den "andra sidan" när uppsättningen incheckningar är begränsad med symmetrisk skillnad.
Om du till exempel har två grenar,
AochB, är ett vanligt sätt att lista incheckningar på bara ena sidan att använda--left-right(se exemplet nedan i beskrivningen av alternativet--left-right). Då visas dock även incheckningar som cherry-pickats från den andra grenen (t.ex. kan “3rd on b” vara cherry-pickad från gren A). Med detta alternativ exkluderas sådana incheckningspar från utdata. -
--left-only -
--right-only -
Lista endast incheckningar på respektive sida av en symmetrisk skillnad, d.v.s. endast de som skulle markeras < respektive > med
--left-right.Till exempel
--cherry-pick--right-onlyA...Butelämnar de incheckningar frånBsom finns iAeller är patch-ekvivalenta med en incheckning iA. Med andra ord listar detta+incheckningar frångitcherryAB. Mer exakt ger--cherry-pick--right-only--no-mergesden exakta listan. -
--cherry -
En synonym för
--right-only--cherry-mark--no-merges; användbar för att begränsa utdata till incheckningar på vår sida och markera de som har tillämpats på den andra sidan av en förgrenad historik medgitlog--cherryupstream...mybranch, liknandegitcherryupstreammybranch. -
-g -
--walk-reflogs -
I stället för att gå igenom incheckningarnas förfäderskedja, gå igenom reflog-poster från den senaste till äldre. När detta alternativ används kan du inte ange incheckningar att exkludera (det vill säga notationerna
^<incheckning>, <incheckning1>..<incheckning2> och <incheckning1>...<incheckning2> kan inte användas).Med
--pretty-format annat änonelineochreference(av uppenbara skäl) får utdata två extra informationsrader hämtade från refloggen. Reflog-beteckningen i utdata kan visas somref@{<Nth>}(där <Nth> är det omvänd kronologiska indexet i refloggen) eller somref@{<timestamp>}(med <timestamp> för posten), beroende på några regler:-
Om startpunkten anges som ref@{<N:te>}, visa indexformatet.
-
Om startpunkten angavs som
ref@{now}, visa tidsstämpelformatet. -
Om ingetdera användes, men
--dateangavs på kommandoraden, visa tidsstämpeln i det format som begärs av--date. -
Annars, visa indexformatet.
Under
--pretty=onelineprefixas incheckningsmeddelandet med denna information på samma rad. Alternativet kan inte kombineras med--reverse. Se även git-reflog[1].Under
--pretty=referencekommer denna information inte att visas alls. -
-
--merge -
Visa incheckningar som berör konflikterande sökvägar i intervallet
HEAD...<andra>, där <andra> är den första befintliga pseudoreferensen iMERGE_HEAD,CHERRY_PICK_HEAD,REVERT_HEADellerREBASE_HEAD. Fungerar bara när indexet har ej sammanfogade poster. Det här alternativet kan användas för att visa relevanta incheckningar när konflikter från en trevägssammanslagning löses. -
--boundary -
Utdata exkluderar gräns-incheckningar. Gräns-incheckningar har prefixet
-.
Historisk förenkling
Ibland är man bara intresserad av delar av historiken, till exempel incheckningar som ändrar en viss <sökväg>. Men det finns två delar av Historik förenkling, en del handlar om att välja incheckningar och den andra är hur man gör det, eftersom det finns olika strategier för att förenkla historiken.
Följande alternativ väljer vilka incheckningar som ska visas:
Observera att extra incheckningar kan visas för att ge en meningsfull historik.
Följande alternativ påverkar hur förenklingen utförs:
- Standardläge
-
Förenklar historiken till den enklaste historiken som förklarar trädets slutliga tillstånd. Enklast eftersom den beskär vissa sidogrenar om slutresultatet är detsamma (d.v.s. sammanfogar grenar med samma innehåll)
-
--show-pulls -
Inkludera alla incheckningar från standardläget, men även alla sammanslagningsincheckningar som inte är TREESAME till den första föräldern men är TREESAME till en senare förälder. Det här läget är användbart för att visa de sammanslagningsincheckningar som "först introducerade" en ändring i en gren.
-
--full-history -
Samma som standardläget, men rensar inte bort en del historik.
-
--dense -
Endast de valda incheckningar visas, plus några för att ha en meningsfull historik.
-
--sparse -
Alla incheckningar i den förenklade historiken visas.
-
--simplify-merges -
Ytterligare ett alternativ till
--full-historyför att ta bort onödiga sammanslagningar från den resulterande historiken, eftersom det inte finns några valda incheckningar som bidrar till denna sammanslagning. -
--ancestry-path[=<incheckning>] -
När ett intervall av incheckningar ges att visa (t.ex. <incheckning1>
..<incheckning2> eller <incheckning2>^<incheckning1>), och en incheckning_<incheckning>_ inom det intervallet, visas endast incheckningar i det intervallet som är förfäder till <incheckning>, underordnade till <incheckning>, eller <incheckning> självt. Om ingen incheckning anges, använd <incheckning1> (den exkluderade delen av intervallet) som <incheckning>. Kan skickas flera gånger; i så fall inkluderas en incheckning om det är någon av de angivna incheckningarna eller om det är en förfader eller ättling till en av dem.
En mer detaljerad förklaring följer.
Anta att du angav foo som <sökvägar>. Vi ska anropa incheckningar som modifierar foo !TREESAME, och resten TREESAME. (I en diff filtrerad för foo ser de olika respektive lika ut.)
I det följande kommer vi alltid att hänvisa till samma exempelhistorik för att illustrera skillnaderna mellan förenklingsinställningarna. Vi antar att du filtrerar efter en fil foo i denna commit-graf:
.-A---M---N---O---P---Q / / / / / / I B C D E Y \ / / / / / `-------------' X
Den horisontella historiklinjen A---Q tas som den första föräldern till varje sammanslagning. Incheckningarna är:
-
Iär den initiala incheckningen, därfoofinns med innehålletasdf, och en filquuxfinns med innehålletquux. Initiala incheckningar jämförs med ett tomt träd, såIär !TREESAME. -
I
Ainnehållerfoobarafoo. -
Binnehåller samma ändring somA. Dess sammanslagningMär trivial och därför TREESAME för alla föräldrar. -
Cändrar intefoo, men dess sammanslagningNändrar det tillfoobar, så det är inte TREESAME med någon förälder. -
Dsätterfootillbaz. Dess sammanslagningOkombinerar strängarna frånNochDtillfoobarbaz; d.v.s. den är inte TREESAME med någon förälder. -
Eändrarquuxtillxyzzy, och dess sammanslagningPkombinerar strängarna tillquuxxyzzy.Pär TREESAME tillO, men inte tillE. -
Xär en oberoende rot-incheckning som lade till en ny filside, ochYmodifierade den.Yär TREESAME tillX. Dess sammanslagningQlade tillsidetillP, ochQär TREESAME tillP, men inte tillY.
rev-list går bakåt genom historiken, inklusive eller exkluderar incheckningar baserat på om --full-history och/eller omskrivning av överordnade kommandon (via --parents eller --children) används. Följande inställningar är tillgängliga.
- Standardläge
-
Incheckningar inkluderas om de inte är TREESAME till någon förälder (även om detta kan ändras, se
--sparsenedan). Om incheckningen var en sammanslagning, och den var TREESAME till en förälder, följ endast den föräldern. (Även om det finns flera TREESAME-föräldrar, följ endast en av dem.) Annars, följ alla föräldrar.Det här resulterar i:
.-A---N---O / / / I---------D
Observera hur regeln att bara följa TREESAME-föräldern, om en sådan finns tillgänglig, tog bort
Bhelt från beaktande.Cbeaktades viaN, men är TREESAME. Rotincheckningar jämförs med ett tomt träd, såIär !TREESAME.Förälder/barn-relationer är bara synliga med
--parents, men det påverkar inte de incheckningar som är valda i standardläget, så vi har visat förälder-linjerna. -
--full-historyutan förälder omskrivning -
Det här läget skiljer sig från standardläget på en punkt: följ alltid alla föräldrar till en sammanslagning, även om den är TREESAME till en av dem. Även om mer än en sida av sammanslagningen har inkluderade incheckningar, betyder det inte att själva sammanslagningen är det! I exemplet får vi
I A B N D O P Q
Mexkluderades eftersom det är TREESAME för båda föräldrarna.E,CochBfick alla gå, men endastBvar !TREESAME, så de andra visas inte.Observera att utan omskrivning av föräldern är det inte riktigt möjligt att prata om förälder/barn-relationerna mellan incheckningar, så vi visar dem frånkopplade.
-
--full-historymed föräldraomskrivning -
Vanliga incheckningar inkluderas endast om de är !TREESAME (även om detta kan ändras, se
--sparsenedan).Sammanslagningar inkluderas alltid. Emellertid skrivs deras föräldralista om: längs varje förälder, beskär bort incheckningar som inte själva inkluderas. Detta resulterar i
.-A---M---N---O---P---Q / / / / / I B / D / \ / / / / `-------------'
Jämför med
--full-historyutan att skriva om ovan. Observera attEbeskars bort eftersom det är TREESAME, men föräldralistan till P skrevs om för att innehålla E`s föräldra `I. Detsamma hände förCochN, ochX,YochQ.
Utöver ovanstående inställningar, kan du ändra om TREESAME påverkar inkludering:
-
--dense -
Incheckningar som genomgås inkluderas om de inte är TREESAME med någon förälder.
-
--sparse -
Alla incheckningar som traverseras inkluderas.
Observera att utan
--full-historyförenklar detta fortfarande sammanslagningar: om en av föräldrarna är TREESAME följer vi bara den, så de andra sidorna av sammanslagningen genomgås aldrig. -
--simplify-merges -
Först, bygg en historikgraf på samma sätt som
--full-historymed föräldraomskrivning gör (se ovan).Förenkla sedan varje incheckning
Ctill dess ersättningC'i den slutliga historiken enligt följande regler:-
Sätt
C'tillC. -
Ersätt varje förälder
PtillC'med dess förenklingP'. I processen tas föräldrar bort som är förfäder till andra föräldrar eller som är rotincheckningar TREESAME till ett tomt träd, och dubbletter tas bort. Var dock noga med att aldrig ta bort alla föräldrar som vi är TREESAME till. -
Om
C'efter denna föräldraomskrivning är en rot- eller sammanslagningsincheckning (har noll eller >1 föräldrar), en gränsincheckning eller !TREESAME, så behålls den. Annars ersätts den med sin enda förälder.
Effekten av detta visas bäst genom att jämföra med
--full-historymed föräldraomskrivning. Exemplet blir:.-A---M---N---O / / / I B D \ / / `---------'
Notera de största skillnaderna i
N,PochQjämfört med--full-history:-
N`s föräldralista hade `I borttagen, eftersom den är en förfader till den andra föräldern
M. Ändå fannsNkvar eftersom den är !TREESAME. -
På liknande sätt togs
Ibort från P`s föräldralista. `P togs sedan bort helt, eftersom den hade en förälder och är TREESAME. -
Q`s föräldralista förenklade `Y till
X.Xtogs sedan bort eftersom det var en TREESAME-rot.Qtogs sedan bort helt eftersom den hade en förälder och är TREESAME.
-
Det finns ytterligare ett förenklingsläge tillgängligt:
-
--ancestry-path[=<incheckning>] -
Begränsa visade incheckningar till dem som är förfäder till <incheckning>, ättlingar till <incheckning>, eller <incheckning> själv.
Som exempel på användningsfall, betrakta följande incheckningshistorik:
D---E-------F / \ \ B---C---G---H---I---J / \ A-------K---------------L--M
En vanlig D..M beräknar mängden incheckningar som är förfäder till M, men exkluderar de som är förfäder till D. Detta är användbart för att se vad som hände med historiken som ledde till M sedan D, i den meningen att "vad har M som inte existerade i D". Resultatet i det här exemplet skulle vara alla incheckningar, förutom A och B (och D självt, förstås).
När vi vill ta reda på vilka incheckningar i
Msom är kontaminerade med programfelet som introducerades avDoch behöver åtgärdas, kanske vi bara vill visa den delmängd avD..Msom faktiskt är ättlingar tillD, d.v.s. exklusiveCochK. Det är precis vad alternativet--ancestry-pathgör. Tillämpat påD..M-intervallet resulterar det i:E-------F \ \ G---H---I---J \ L--M
Vi kan också använda
--ancestry-path=Di stället för--ancestry-pathvilket betyder samma sak när det tillämpas påD..M-intervallet men är bara mer explicit.Om vi i stället är intresserade av ett givet ämne inom detta intervall, och alla incheckningar som påverkas av det ämnet, kanske vi bara vill se den delmängd av
D..Msom innehåller det ämnet i sin förfäders-sökväg. Så att använda--ancestry-path=HD..Mtill exempel skulle resultera i:E \ C---G---H---I---J \ L--M
Medan
--ancestry-path=KD..Mskulle resultera iK---------------L--M
Innan vi diskuterar ett annat alternativ, --show-pulls, behöver vi skapa en ny exempel historik.
Ett vanligt problem som användare stöter på när de tittar på förenklad historik är att en incheckning som de vet har ändrat en fil på något sätt inte visas i filens förenklade historik. Låt oss visa ett nytt exempel och visa hur alternativ som --full-history och --simplify-merges fungerar i så fall:
.-A---M-----C--N---O---P / / \ \ \/ / / I B \ R-'`-Z' / \ / \/ / \ / /\ / `---X--' `---Y--'
I det här exemplet, anta att I skapade file.txt som modifierades av A, B och X på olika sätt. De ensamstående föräldra-incheckningen C, Z och Y ändrar inte file.txt. Sammanslagnings-incheckningen M skapades genom att lösa sammanslagnings-konflikten för att inkludera både ändringar från A och B och är därför inte TREESAME till någon av dem. Sammanslagningens-incheckningen R skapades dock genom att ignorera innehållet i file.txt vid M och endast ta innehållet i file.txt vid X. Därför är R TREESAME till X men inte M. Slutligen är den naturliga sammanslagningslösningen för att skapa N att ta innehållet i file.txt vid R, så N är TREESAME till R men inte C. Sammanslagnings-incheckningen O och P är TREESAME till sina första föräldrar, men inte till sina andra föräldrar, Z respektive Y.
När standardläget används har både N och R en TREESAME-förälder, så dessa kanter genomgångna och de andra ignoreras. Den resulterande historikgrafen är:
I---X
När man använder --full-history går Git runt på varje kant. Detta kommer att upptäcka incheckningar A och B och sammanslagningen M, men kommer också att avslöja sammanslagningsincheckningar O och P. Med omskrivning av föräldern, blir den resulterande grafen:
.-A---M--------N---O---P / / \ \ \/ / / I B \ R-'`--' / \ / \/ / \ / /\ / `---X--' `------'
Här bidrar sammanslagningsincheckningar O och P med extra brus, eftersom de faktiskt inte bidrog med någon ändring i file.txt. De slog bara samman ett ämne som baserades på en äldre version av file.txt. Detta är ett vanligt problem i kodförråd som använder ett arbetsflöde där många bidragsgivare arbetar parallellt och slår samman sina ämnesgrenar längs en enda stam: många orelaterade sammanslagningar visas i --full-history-resultaten.
När man använder alternativet --simplify-merges försvinner incheckningar O och P från resultaten. Detta beror på att de omskrivna andra föräldrarna till O och P är nåbara från sina första föräldrar. Dessa kanter tas bort och då ser incheckningarna ut som ensamstående-förälder-incheckningar som är TREESAME som sin förälder. Detta händer även med incheckning N, vilket resulterar i en historikvy enligt följande:
.-A---M--. / / \ I B R \ / / \ / / `---X--'
I den här vyn ser vi alla viktiga ändringar med en förälder från A, B och X. Vi ser också den noggrant lösta sammanslagningen M och den mindre noggrant lösta sammanslagningen R. Detta är oftast tillräckligt för att avgöra varför incheckningarna A och B "försvann" från historiken i standardvyn. Det finns dock några problem med den här metoden.
Det första problemet är prestanda. Till skillnad från tidigare alternativ kräver --simplify-merges att hela incheckningshistoriken traverseras innan ett enda resultat returneras. Det kan göra alternativet svårt att använda för mycket stora kodförråd.
Det andra problemet gäller granskning. När många bidragsgivare arbetar på samma kodförråd är det viktigt vilka sammanslagningsincheckningar som introducerade en ändring i en viktig gren. Den problematiska sammanslagningsincheckningen R ovan är sannolikt inte den sammanslagningsincheckning som användes för att slå samman den med en viktig gren. I stället användes sammanslagningsincheckningen N för att slå samman R och X med den viktiga grenen. Denna incheckning kan innehålla information om varför ändringen X åsidosatte ändringarna från A och B i sitt incheckningsmeddelande.
-
--show-pulls -
Förutom de incheckningar som visas i standardhistoriken, visa varje sammanslagningsincheckning som inte är TREESAME till sin första förälder men är TREESAME till en senare förälder.
När en sammanslagningsincheckning inkluderas av
--show-pulls, behandlas sammanslagningsincheckningen som om den "hämtat" ändringen från en annan gren. När--show-pullsanvänds i detta exempel (och inga andra alternativ) är den resulterande grafen:I---X---R---N
Här inkluderas sammanslagningsincheckningarna
RochNeftersom de drog in incheckningarnaXrespektiveRi basgrenen. Dessa sammanslagningar är anledningen till att incheckningarnaAochBinte visas i standardhistoriken.När
--show-pullsparas ihop med--simplify-mergesinnehåller grafen all nödvändig information:.-A---M--. N / / \ / I B R \ / / \ / / `---X--'
Observera att eftersom
Mkan nås frånRhar kanten frånNtillMförenklats bort.Nvisas dock fortfarande i historiken som en viktig incheckning eftersom den drog in ändringenRi huvudgrenen.
Alternativet --simplify-by-decoration låter dig bara se den övergripande bilden av historikens topologi, genom att utelämna incheckningar som inte refereras till av taggar. Incheckningar markeras som !TREESAME (med andra ord, behålls efter historikförenklingsreglerna som beskrivs ovan) om (1) de refereras till av taggar, eller (2) de ändrar innehållet i sökvägarna som anges på kommandoraden. Alla andra incheckningar markeras som TREESAME (med förbehåll för att förenklas bort).
KARTLÄGG FÖRFATTARE
Se gitmailmap[5].
Observera att om git shortlog körs utanför ett kodförråd (för att bearbeta logginnehåll på standardindata), kommer den att leta efter en .mailmap-fil i den aktuella katalogen.
GIT
En del av git[1]-sviten