Övning – Använd Git för att åtgärda misstag

Slutförd

Nu ska vi öva på att fixa våra misstag!

Öva på att återskapa en borttagen fil

  1. Prova först att ta bort index.html:

    rm index.html
    

    Det kan verka som en dålig idé, men kom ihåg: Git har ryggen!

  2. Använd kommandot ls för att kontrollera att index.html togs bort:

    ls
    
  3. Du bör se följande utdata. Observera att det nu inte finns någon index.html-fil !

    CSS
    
  4. Nu återställer vi index.html. Använd git checkout för att ta tillbaka index.html:

    git checkout -- index.html
    
  5. Använd ls igen för att kontrollera innehållet i den aktuella katalogen. Har index.html återställts?

    Japp! Utdata bör nu ha en index.html-fil och en CSS-katalog :

    CSS  index.html
    

Öva på att återställa en fil som har tagits bort: git rm

När du vill återställa borttagna filer är det lite mer komplicerat om du tar bort dem med hjälp git rm av i stället för med hjälp rmav .

  1. Prova det här kommandot om du vill se vad som händer:

    git rm index.html
    
  2. Leta igen efter index.html genom att köra ls. Du bör inte se index.html.

  3. Försök att återställa index.html på samma sätt som du gjorde förra gången:

    git checkout -- index.html
    
  4. Den här gången klagar Git på att den inte känner till index.html. Det beror på att Git inte bara tog bort filen, den registrerade borttagningen i indexet:

    error: pathspec 'index.html' did not match any file(s) known to git.
    
  5. Ångra mellanlagringen för borttagningen av index.html med kommandot git reset:

    git reset HEAD index.html
    
  6. Sök efter dessa utdata, vilket bekräftar det:

    Unstaged changes after reset:
    D       index.html
    
  7. Nu kan du återställa filen från indexet med det kommando som du använde tidigare:

    git checkout -- index.html
    

    git reset ångrade mellanlagringen av ändringen, men filen togs ändå bort och därför behövde du använda checkout för att få tillbaka den.

  8. Dubbelkolla att det fungerade genom att köra ls.

Ångra en incheckning

Nu ska vi göra saker mer komplicerade. Anta att du av misstag skriver över en fil med en annan fil, eller så gör du en ändring i en fil som visar sig vara ett stort misstag. Du vill återgå till den tidigare versionen av filen, men du hade redan checkat in ändringarna. I det här fallet gör en enkel git checkout inte tricket.

En lösning på det här problemet är att ångra föregående incheckning.

  1. Öppna index.html med code:

    code index.html
    
  2. Ersätt innehållet i index.html med den här koden:

    <h1>That was a mistake!</h1>
    
  3. Spara och stäng filen.

  4. Använd de här kommandona för att checka in ändringarna och visa den senaste incheckningen:

    git commit -m "Purposely overwrite the contents of index.html" index.html
    git log -n1
    

    Flaggan -n1 här anger för Git att vi bara vill ha den senaste incheckningsposten.

  5. Använd följande kommandon och försök återställa index.html:

    git checkout -- index.html
    
  6. Öppna index.html i redigeraren:

    code index.html
    

    Vilken version av index.html ser du? Den gamla versionen eller den nya versionen?

    I den här situationen är det bäst att ångra ändringen genom att göra en till incheckning som ersätter den första. Den uppgiften faller på git revert.

  7. Stäng filen och använd git revert för att ångra dina incheckade ändringar:

    git revert --no-edit HEAD
    

    Flaggan --no-edit anger för Git att vi inte vill lägga till ett incheckningsmeddelande för den här åtgärden.

  8. Kontrollera utdata. Det bör se ut ungefär som i det här exemplet:

    [main 6a27310] Revert "Purposely overwrite the contents of index.html"
    1 file changed, 13 insertions(+), 1 deletion(-)
    
  9. Följ upp med ett git log-kommando för att visa den senaste incheckningen:

    git log -n1
    
  10. Kontrollera utdata igen. Det bör se ut så här:

    Author: User Name <user-name@contoso.com>
    Date:   Tue Nov 19 23:42:26 2019 +0000
    
    Revert "Purposely overwrite the contents of index.html"
    
    This reverts commit 15d3bded388470c98881a632025bc15190fe9d17.
    
  11. Öppna slutligen filen index.html för att kontrollera att innehållet är rätt version.

Att återställa är inte det enda sättet att åtgärda den här situationen. du kan bara redigera index.html och checka in den korrigerade filen. Det alternativet är svårare om de ändringar som du har gjort var omfattande. I vilket fall som git revert helst är ett bra sätt att signalera din avsikt.