Eenvoudige fouten herstellen
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.