Git
Iscensättning
Sök…
Anmärkningar
Det är värt att notera att iscensättning har lite att göra med "filer" själva och allt att göra med förändringarna inom varje given fil. Vi arrangerar filer som innehåller ändringar, och git spårar ändringarna som åtaganden (även när ändringarna i ett engagemang görs över flera filer).
Skillnaden mellan filer och åtaganden kan tyckas vara liten, men att förstå denna skillnad är grundläggande för att förstå viktiga funktioner som körsbär-plockning och diff. (Se frustrationen i kommentarer om komplexiteten i ett accepterat svar som föreslår körsbärsplockning som ett verktyg för filhantering .)
Vad är ett bra ställe för att förklara koncept? Är det i anmärkningar?
Nyckelbegrepp:
En fil är den vanligaste metaforen för de två inom informationsteknologi. Bästa praxis dikterar att ett filnamn inte ändras när innehållet ändras (med några erkända undantag).
En åtagande är en metafor som är unik för källkodshantering. Åtaganden är förändringar relaterade till en specifik ansträngning, som en buggfix. Åtaganden involverar ofta flera filer. En enda, mindre bugfix kan involvera tweaks till mallar och css i unika filer. När ändringen beskrivs, utvecklas, dokumenteras, granskas och distribueras, kan ändringarna över de separata filerna kommenteras och hanteras som en enda enhet. Den enda enheten i detta fall är åtagandet. Lika viktigt, att fokusera bara på åtagandet under en granskning gör det möjligt att ignorera de oförändrade kodraderna i de olika berörda filerna på ett säkert sätt.
Iscensättning av en enda fil
För att arrangera en fil för att begå, kör
git add <filename>
Iscensättning av alla ändringar i filer
git add -A
git add .
I version 2.x, git add .
kommer att arrangera alla ändringar av filer i den aktuella katalogen och alla dess underkataloger. I 1.x kommer det emellertid bara att skapa nya och modifierade filer, inte raderade filer .
Använd git add -A
, eller dess motsvarande kommando git add --all
, för att arrangera alla ändringar i filer i vilken version av git som helst.
Etapp raderade filer
git rm filename
För att radera filen från git utan att ta bort den från disken, använd flaggan - --cached
git rm --cached filename
Avstämma en fil som innehåller ändringar
git reset <filePath>
Interaktivt lägg till
git add -i
(eller - --interactive
) ger dig ett interaktivt gränssnitt där du kan redigera indexet för att förbereda det du vill ha i nästa åtagande. Du kan lägga till och ta bort ändringar i hela filer, lägga till ospårade filer och ta bort filer från att spåras, men också välja underavsnitt av ändringar som ska läggas i indexet, genom att välja bitar av ändringar som ska läggas till, dela upp dessa bitar eller till och med redigera diff . Många grafiska åtagningsverktyg för Git (som t.ex. Git git gui
) inkluderar en sådan funktion; detta kan vara lättare att använda än kommandoradversionen.
Det är mycket användbart (1) om du har sammankopplat förändringar i arbetskatalogen som du vill lägga i separata åtaganden, och inte alla i en enda engagemang (2) om du är i mitten av en interaktiv rebas och vill dela upp för stora engagemang.
$ git add -i
staged unstaged path
1: unchanged +4/-4 index.js
2: +1/-0 nothing package.json
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now>
Den övre halvan av denna utgång visar det aktuella tillståndet för index uppdelat i iscensatta och ostadierade kolumner:
-
index.js
har lagt till 4 rader och fyra rader tagits bort. Det är för närvarande inte iscensatt, eftersom den nuvarande statusen rapporterar "oförändrad." När den här filen blir iscensatt överförs +4+4/-4
biten till den iscensatta kolumnen och den ostadierade kolumnen kommer att läsa "ingenting." -
package.json
har lagt till en rad och har arrangerats. Det har inte gjorts några ytterligare förändringar eftersom det har skett som indikeras av raden "ingenting" under den ostadierade kolumnen.
Den nedre halvan visar vad du kan göra. Ange antingen ett nummer (1-8) eller en bokstav ( s
, u
, r
, a
, p
, d
, q
, h
).
status
visar utgången identisk med den övre delen av utgången ovan.
update
gör att du kan göra ytterligare ändringar i de iscensatta åtagandena med ytterligare syntax.
revert
kommer att återställa den iscensatta åtkomstinformationen till HEAD.
add untracked
låter dig lägga till filspår som tidigare inte spårats med versionskontroll.
patch
gör det möjligt att välja en sökväg ur en utgång som liknar status
för vidare analys.
diff
visar vad som kommer att vara engagerat.
quit
avslutar kommandot.
help
ger ytterligare hjälp med att använda detta kommando.
Lägg till ändringar av hunk
Du kan se vad "hunks" av arbetet skulle arrangeras för att begå med hjälp av patch-flaggan:
git add -p
eller
git add --patch
Detta öppnar en interaktiv prompt som gör att du kan titta på diff och låta dig bestämma om du vill inkludera dem eller inte.
Stage this hunk [y,n,q,a,d,/,s,e,?]?
- y scenen här hunk för nästa begå
- n inte scenen här hunk för nästa begå
- q sluta; inte scenen här hunken eller någon av de återstående hunks
- ett skede denna hunk och alla senare hunks i filen
- d inte scenen här hunken eller någon av de senare hunks i filen
- g välj en hunk att gå till
- / sök efter en hunk som matchar det givna regexet
- j lämna denna hunk obesluten, se nästa obeslutna hunk
- J lämnar denna hunk obestämd, se nästa hunk
- k lämna denna hunk obesluten, se föregående obeslutad hunk
- K lämnar denna hunk obesluten, se tidigare hunk
- s delar upp den nuvarande hunken i mindre hunks
- e manuellt redigera den nuvarande hunken
- ? skriv ut hunk hjälp
Detta gör det enkelt att fånga förändringar som du inte vill göra.
Du kan också öppna detta via git add --interactive
och välja p
.
Visa iscensatta ändringar
För att visa hunks som är iscensatt för engagemang:
git diff --cached