Eenvoudige fouten herstellen

Voltooid

Soms gaan er dingen mis. U vergeet misschien een nieuw bestand toe te voegen of misschien voegt u per ongeluk een bestand toe. Misschien hebt u een spelfout gemaakt in uw laatste doorvoering of hebt u iets doorgevoerd dat u niet van plan was. Mogelijk hebt u per ongeluk een bestand verwijderd.

Met Git kunt u gerust wijzigingen maken, omdat u altijd terug kunt gaan naar een eerder punt. U kunt zelf de doorvoeringsgeschiedenis van Git wijzigen, zolang u alleen doorvoeringen wijzigt die niet zijn gedeeld.

Een doorvoering wijzigen: --wijzigingsvlag

In de vorige oefening hebt u het bestand index.html bijgewerkt om het pad naar het opmaakmodel te wijzigen. U moet de volgende instructie hebben toegevoegd:

<link rel="stylesheet" href="CSS/site.css">

Stel dat u ontdekt dat u een fout hebt gemaakt bij het invoeren van de instructie. In plaats van het mappad op te geven als CSS, hebt u het volgende ingevoerd CS:

<link rel="stylesheet" href="CS/site.css">

Wanneer u de pagina in uw browser vernieuwt, ziet u dat uw CSS-opmaakmodel niet is toegepast. Nadat u dit hebt onderzocht, realiseert u zich dat u de padwaarden onjuist hebt ingevoerd.

U werkt index.html dus bij met het juiste pad naar het opmaakmodel. Op dit moment kunt u gewoon de gecorrigeerde versie van index.html doorvoeren, maar in plaats daarvan wilt u deze in dezelfde doorvoering plaatsen als de oorspronkelijke. De --amend optie waarmee git commit u de geschiedenis kunt wijzigen (en hoe vaak krijgt u de kans om de geschiedenis te wijzigen?).

git commit --amend --no-edit

Met de --no-edit wordt aan Git doorgegeven dat de wijziging moet worden doorgevoerd zonder het doorvoeringsbericht te wijzigen. U kunt ook --amend een doorvoerbericht bewerken, bestanden toevoegen die per ongeluk uit de doorvoering zijn weggelaten of bestanden verwijderen die per ongeluk zijn toegevoegd.

Notitie

De mogelijkheid om geschiedenis te wijzigen, is één van de krachtigste functies van Git. Net als bij de meeste energiehulpmiddelen moet u deze zorgvuldig gebruiken. Het is met name een slecht idee om doorvoeringen te wijzigen die zijn gedeeld met een andere ontwikkelaar of die zijn gepubliceerd in een gedeelde opslagplaats, zoals GitHub.

Een verwijderd bestand herstellen: git-betaling

Stel dat u een wijziging hebt aangebracht in een broncodebestand dat het hele project heeft verbroken, dus u wilt terugkeren naar de vorige versie van dat bestand. Of misschien hebt u per ongeluk een bestand helemaal verwijderd. Met Git is het eenvoudiger om een eerdere versie op te halen, zelfs als de huidige versie niet meer bestaat. Uw beste vriend in deze situatie is de git-uitcheckopdracht .

git checkout heeft meerdere toepassingen, maar in de volgende oefening gebruiken we deze om een verwijderd bestand te herstellen. git checkout werkt bestanden in de actieve boomstructuur bij zodat deze overeenkomt met de versie in de index of in de opgegeven structuur.

Als u een bestand per ongeluk hebt verwijderd, kunt u het herstellen door de versie van de index weer in de actieve structuur te plaatsen met behulp van deze opdracht:

git checkout -- <file_name>

U kunt ook een bestand uitchecken van een eerdere doorvoering (meestal het hoofd van een andere vertakking), maar de standaardinstelling is om het bestand op te halen uit de index. De -- in het argumentenlijst is bedoeld om de doorvoering te scheiden van de lijst van bestandspaden. Het is in dit geval niet strikt nodig, maar als u een vertakking had met de naam <file_name> (misschien omdat dat de naam is van het bestand waaraan in die vertakking wordt gewerkt), -- zou git niet in de war raken.

Later leert u dat u ook gebruikt checkout om van vertakking te wisselen.

Bestanden herstellen: git reset

U kunt ook een bestand verwijderen met behulp van git rm. Met deze opdracht wordt het bestand op uw schijf verwijderd, maar ook git registreert het verwijderen van het bestand in de index.

Dus als u deze opdracht hebt uitgevoerd:

git rm index.html
git checkout -- index.html

zal Git index.htmlniet zomaar herstellen. In plaats daarvan krijgt u een foutmelding zoals in dit voorbeeld:

error: pathspec 'index.html' did not match any file(s) known to git.

Om index.html te herstellen, moeten we een andere techniek gebruiken: git reset. U kunt de git reset fase van wijzigingen opheffen.

U kunt index.html herstellen met behulp van deze twee opdrachten:

git reset HEAD index.html
git checkout -- index.html

Hier wordt de fasering van de bestandsverwijdering uit Git ongedaan gemaakt door git reset. Met deze opdracht wordt het bestand teruggezet naar de index, maar het bestand wordt nog steeds verwijderd op schijf. U kunt deze vervolgens vanuit de index herstellen naar de schijf met behulp van git checkout.

Hier is nog een Aha!-moment voor nieuwe Git-gebruikers. Veel VCSes maken bestanden alleen-lezen om ervoor te zorgen dat slechts één persoon tegelijk wijzigingen kan aanbrengen; gebruikers gebruiken een niet-gerelateerde checkout opdracht om een beschrijfbare versie van het bestand op te halen. Ook gebruiken ze checkin voor een bewerking die vergelijkbaar is met wat Git met een combinatie van add, commit en push doet. Dit feit veroorzaakt af en toe verwarring wanneer mensen Git gaan gebruiken.

Een doorvoering herstellen: Git revert

De laatste belangrijke opdracht die u moet kennen voor het oplossen van fouten met Git is git revert. git checkout werkt alleen in situaties waarin de wijzigingen die ongedaan moeten worden gemaakt zich in de index bevinden. Nadat u wijzigingen hebt doorgevoerd, moet u een andere strategie gebruiken om deze ongedaan te maken. In dit geval kunnen we onze git revert vorige doorvoering herstellen. Het werkt door een andere doorvoering te maken die de eerste doorvoering annuleert.

We kunnen git revert HEAD een doorvoering maken die het exacte tegenovergestelde is van de laatste doorvoering, waarbij de vorige doorvoering ongedaan wordt maken terwijl alle geschiedenis intact blijft. Het HEAD deel van de opdracht vertelt Git alleen dat we alleen de laatste doorvoering ongedaan willen maken.

Naast elkaar kunt u ook de meest recente doorvoering verwijderen met behulp van de git reset opdracht:

git reset --hard HEAD^

Git biedt verschillende typen resets. De standaardwaarde is --mixed, waarmee de index opnieuw wordt ingesteld, maar niet de actieve boomstructuur. Ook wordt HEAD verplaatst als u een andere doorvoering opgeeft. De --soft optie wordt alleen verplaatst HEAD en de index en de actieve boomstructuur blijven ongewijzigd. Deze optie laat al uw wijzigingen staan als 'wijzigingen die moeten worden doorgevoerd', zoals git status deze zou worden geplaatst. Bij het --hard opnieuw instellen worden zowel de index als de werkstructuur gewijzigd zodat deze overeenkomt met de opgegeven doorvoering. Wijzigingen die u hebt aangebracht in bijgehouden bestanden, worden verwijderd.