Övning – Använd Git för att åtgärda misstag
Nu ska vi öva på att fixa våra misstag!
Öva på att återskapa en borttagen fil
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!
Använd kommandot
ls
för att kontrollera att index.html togs bort:ls
Du bör se följande utdata. Observera att det nu inte finns någon index.html-fil !
CSS
Nu återställer vi index.html. Använd
git checkout
för att ta tillbaka index.html:git checkout -- index.html
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 rm
av .
Prova det här kommandot om du vill se vad som händer:
git rm index.html
Leta igen efter index.html genom att köra
ls
. Du bör inte se index.html.Försök att återställa index.html på samma sätt som du gjorde förra gången:
git checkout -- index.html
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.
Ångra mellanlagringen för borttagningen av index.html med kommandot
git reset
:git reset HEAD index.html
Sök efter dessa utdata, vilket bekräftar det:
Unstaged changes after reset: D index.html
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ändacheckout
för att få tillbaka den.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.
Öppna index.html med
code
:code index.html
Ersätt innehållet i index.html med den här koden:
<h1>That was a mistake!</h1>
Spara och stäng filen.
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.Använd följande kommandon och försök återställa index.html:
git checkout -- index.html
Ö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
.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.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(-)
Följ upp med ett
git log
-kommando för att visa den senaste incheckningen:git log -n1
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.
Ö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.