Git 🌙
Chapters â–Ÿ 2nd Edition

2.4 Grunder i Git - Ångra saker

Ångra saker

Det finns tillfÀllen dÄ du kanske vill Ängra nÄgot. HÀr kommer vi att titta pÄ nÄgra fÄ grundlÀggande verktyg för att Ängra Àndringar du gjort. Var försiktig, för att du kan inte alltid Ängra nÄgot som du Ängrat. Detta Àr ett av nÄgra fÄ omrÄden i Git dÀr du faktiskt kan förlora nÄgot om du gör det fel.

En av de vanligaste sakerna man vill Ängra Àr ifall du sparar en version för tidigt och kanske glömmer att lÀgga till filer, alternativt om du skriver fel i ditt versionsmeddelande. Om du vill göra om versionen, göra ytterligare Àndringar, preparera dem och skapa en ny version igen, sÄ kan du anvÀnda valet --amend:

$ git commit --amend

Kommandot tar din preparationsyta och anvÀnder den för versionen. Om du inte gjort nÄgra Àndringar sedan din förra version (till exempel om du kör kommandot direkt efter att du skdapat en version) kommer ögonblicksbilden att se identisk ut, och allt du kan Àndra Àr ditt versionsmeddelande.

Samma editor som du anvÀnde nÀr du gjorde din förra version öppnas, men den innehÄller dÄ ditt förra versionsmeddelande. Du kan Àndra meddelandet som alltid, men det skriver över din tidigare sparade version.

Som exempel, om du sparar en version och sedan inser att du glömde lÀgga till Àndringar i en fil du ville ha med i versionen sÄ kan du göra nÄgot liknande detta:

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

I slutĂ€ndan fĂ„r du en enda version — den andra versionen ersĂ€tter resultatet av den första.

Notera

Det Àr viktigt att förstÄ att nÀr du gör ett tillÀgg till din senaste version, sÄ ersÀtter du egentligen din gamla version med en helt ny, förbÀttrad version som knuffar undan den gamla versionen och lÀgger den nya versionen i dess stÀlle. I praktiken Àr det som att den föregÄende versionen aldrig fanns, och den kommer inte heller att visas i din versionshistorik.

Det uppenbara vĂ€rdet i att göra tillĂ€gg pĂ„ detta sĂ€tt Ă€r att göra mindre förbĂ€ttringar till din senaste version utan att kladda ner din versionshistorik med meddelanden som “Hoppsan, glömde lĂ€gga till en fil” eller “Skit ocksĂ„, tryckfelsnisse i senaste versionen”.

Ångra en preparerad fil

Kommande tvÄ avsnitt demonstrerar hur man arbetar med prepareringsytan och Àndringar i arbetskatalogen. Det trevliga Àr att kommandot du anvÀnder för att avgöra statusen pÄ de tvÄ ytorna Àven pÄminner om hur man gör Àndringar ogjorda till dem. Till exempel, sÀg att du har Àndrat tvÄ filer och vill spara dem som tvÄ separata Àndringar, men du har av misstag skrivit git add * och markerat bÄda att ingÄ i din nÀsta version. Hur kan du markera en av dem som oförbredd? Kommandot git status pÄminner dig:

$ git add *
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    renamed:    README.md -> README
    modified:   CONTRIBUTING.md

Under texten “Changes to be committed” (Ändringar att spara) stĂ„r det git reset HEAD <file>... för att markera filen som oförberedd. LĂ„t oss anvĂ€nda det rĂ„det och flagga filen CONTRIBUTING.md som oförberedd:

$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M	CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    renamed:    README.md -> README

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   CONTRIBUTING.md

Kommandot Àr lite mÀrkligt, men fungerar. Filen CONTRIBUTING.md Àr modifierad men Äterigen inte förberedd för nÀsta version.

Notera

Det Àr sant att git reset kan vara ett farligt kommando, speciellt om du anvÀnder flaggan --hard. Dock, i scenariot ovan, sÄ berörs inte filen i arbetskatalogen, sÄ det Àr relativt sÀkert.

För nu Àr denna magiska anvÀndning allt du behvöver veta om kommandot git reset. Vi kommer att gÄ in i mer detalj kring vad reset gör och hur man anvÀnder det för att göra mycket intressanta saker i Reset Demystified.

ÅterstĂ€lla en modifierad fil

Vad gör du om du inser att du inte vill behĂ„lla Ă€ndringarna i CONTRIBUTING.md? Hur kan man Ă„terstĂ€lla den — ÄterstĂ€lla till sĂ„ den sĂ„g ut i din senast sparade version (eller klonade, eller hur du nu fick in den i din arbetskatalog)? Som tur Ă€r ger git status oss en fingervisning om detta ocksĂ„. I förra exempelutskriften sĂ„ sĂ„g det ut sĂ„hĂ€r:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   CONTRIBUTING.md

Den talar uttryckligen om hur du kastar bort Àndringarna som du gjort. LÄt oss pröva:

$ git checkout -- CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    renamed:    README.md -> README

Du kan se att Àndringarna nu Àr borta.

Viktigt

Det Ă€r viktigt att förstĂ„ att git checkout -- <file> Ă€r ett farligt kommando. Alla lokala Ă€ndringar i filen försvinner — Git bara kopierar den senaste versionen av filen och ersĂ€tter den gamla. AnvĂ€nd aldrig detta kommandot förutom om du Ă€r helt sĂ€ker pĂ„ att du inte vill ha dessa osparade lokala Ă€ndringarna.

Om du vill behÄlla Àndringarna i filen men bara vill fÄ dem ur vÀgen för nu, sÄ kommer vi att gÄ igenom gömman och förgreningar i Git förgreningar; dessa Àr generellt sÀtt bÀttre vÀgar att ta.

Kom ihĂ„g att allt som Ă€r sparat i en version (commit) i Git nĂ€stan alltid kan Ă„terskapas. Även versioner som var pĂ„ grenar som tagits bort, eller versioner som skrivits över med flaggan --amend kan Ă„terskapas (se Data Recovery för Ă„terstĂ€llning av data). Dock, det som du förlorar som aldrig sparats i en version kommer sannolikt aldrig mer se dagens ljus.

scroll-to-top