Dingen ongedaan maken · oefening
Ik heb iets klaargezet dat ik niet wilde klaarzetten
Je hebt git add iets te ruim toegepast. Nu is er iets klaargezet dat je niet in je volgende commit wilt. Er is nog niets gecommit. Je wilt het uit de staging area halen, maar het bestand niet kwijtraken.
Dat zijn twee verschillende wensen en Git behandelt ze als twee verschillende bewerkingen. Deze les gaat alleen over de eerste.
Bekijk wat is klaargezet
git status
scratch.tmp is een privékladbestand met twee herinneringen: de getijden controleren en het hostel bellen. Het is staged, dus klaargezet voor de volgende commit. Dat soort inhoud hoort niet in de geschiedenis van een project.
Haal het weer uit de staging area
git restore --staged scratch.tmp
git status
Dit is dezelfde git restore als in de vorige les, met één extra optie. --staged zegt dat de staging area moet veranderen in plaats van de werkboom. Voor een bijgehouden bestand herstelt het de klaargezette versie vanuit de nieuwste commit. scratch.tmp is nog nooit gecommit. Hier betekent het dus dat het bestand wordt verwijderd uit de momentopname die voor de volgende commit klaarstaat.
Daarna verschuift scratch.tmp in git status van staged naar untracked. Het staat nog steeds ongewijzigd op schijf, met je twee herinneringen erin. Het staat alleen niet meer op de lijst.
Wat dit vernietigt en wat niet
Bijna niets. Daarom is het nuttig om dit vroeg te leren. git restore --staged maakt een beslissing ongedaan, geen bewerking. Je bestand houdt zijn inhoud. Er wordt niets gecommit en er verschuift geen geschiedenis.
Het verschil met de vorige les is het hele punt. Onthoud het:
git restore <file>verandert de werkboom. Het gooit je bewerking weg.git restore --staged <file>verandert de staging area. Het bewaart je bestand en maakt alleen het klaarzetten ongedaan.
De optie maakt het verschil tussen de veilige en de definitieve bewerking. Lees de opdracht die je gaat uitvoeren.
Houd het er blijvend buiten
Uit de staging area halen lost het voor vandaag op. Moet je een kladbestand telkens opnieuw daaruit halen, dan wil je waarschijnlijk dat Git het blijvend negeert. Daar dient een .gitignore-bestand voor. Dat komt in hoofdstuk 9 en is een betere oplossing dan er elke keer aan denken.
notes.md bevat bewerkingen die je wilt houden, maar je hebt het te vroeg klaargezet. Welke opdracht haalt het van de lijst voor de volgende commit zonder je bewerkingen aan te raken?
Hierna: de commit is al gemaakt en klopt niet.