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
2,0
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:

  1. 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."
  2. 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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow