08 jul 2019 #Techtalk

Door Sander ten Brinke access_time3 min
Vind verloren commits terug met git reflog!

Als developer maak jij hoogstwaarschijnlijk gebruik van git om jouw code te beheren. git reflog helpt jou om verloren commits terug te vinden. Het toont een audit log van jouw repo waar zelfs verwijderde commits in staan. Wist je dat je deze kunt herstellen? Zo hoef je niet opnieuw te beginnen.

Vind verloren commits terug met git reflog!

Het kan maar zo zijn dat je deze XKCD al een keer hebt gezien:
git xkcd
Bron: https://xkcd.com/1597/

De kans is ook aanwezig dat je wel eens een fout hebt gehad in jouw repo. Met als gevolg: bestanden zijn niet meer te vinden of commits gingen in rook op. Voor sommigen is de oplossing dan het uitvoeren van rm -r repo && git clone... om vervolgens opnieuw te beginnen.

Als je dit hebt meegemaakt en die geweldige feature waar je mee bezig was bent kwijtgeraakt, weet je dat dit erg frustrerend is. Je kunt weer helemaal opnieuw beginnen.

Maar gelukkig is hier een oplossing voor! Zo kun je verdwenen commits of een “invalide” repository terugzetten naar een moment toen alles nog zuiver was!

Met git reflog worden al jouw lokale acties in de git repo en de HEAD bijgehouden. Dit ziet er als volgt uit:

git reflog in terminal

Stap voor stap zie je wat er gebeurd is in mijn repository, beginnend onderaan. Links staat de SHA1 hash van de commit, aanvullend met informatie over bijvoorbeeld de clone, het maken van een nieuwe commit of het wisselen van branch. 

Stel, je raakt commits kwijt, dan kan je met git reflog tóch die commits terugvinden. Het voordeel is namelijk dat git deze informatie niet opslaat bij de commits, maar binnen de audit log of als “historie”. 

Om bijvoorbeeld terug te gaan naar mijn eerste commit (die ik ben kwijtgeraakt op branch master), kan ik de volgende 2 git commando’s uitvoeren om mijn commits terug te krijgen:

git checkout master
git reset --hard 41935ef

Let op! git reflog is een geweldige tool, maar deze audit log is niet oneindig te gebruiken! Na een bepaalde tijd wordt het opgeschoond en worden oude stappen die zijn uitgevoerd verwijderd. Ze zijn dan niet meer terug te vinden met git reflog. Blijf daarom altijd voorzichtig omgaan met je commits en ontwikkel niet met blind vertrouwen op dit commando.

 

Meer weten over git reflog? Klik dan op deze links!

Volgend bericht
Angular Workshop "From Zero to Hero"