Hoe teruggekeerde commits in een Git-repository te herstellen

Als je zojuist een Git-commit hebt teruggedraaid en per ongeluk hebt verwijderd een bestand of stukje code daardoor, maak je geen zorgen. Git houdt alles bij en het herstellen van het herstelde bestand is eenvoudig te doen vanaf de opdrachtregel en de meeste GUI Git-clients.

Niet doen Paniek

Gelukkig houdt Git alles bij, zelfs teruggedraaide commits. Je hebt nog niets verwijderd.

Mogelijk bent u dit tegengekomen toen u probeerde “verwijderen” een Git-commit. Je kunt commits echter niet echt verwijderen als je ze eenmaal hebt gemaakt. Je kunt alleen resetten naar een eerdere commit en de lokale wijzigingen negeren, of de wijzigingen terugdraaien.

In mijn geval met dit probleem had ik bijvoorbeeld net mijn Git-repository geïnitialiseerd en per ongeluk alles gestaged zonder te schrijven mijn .gitignore-bestand, dat ./bin/-mappen en andere rommel heeft vastgelegd die ik niet wilde. Dus, zonder erover na te denken, klikte ik op “terugzetten” in mijn Git-client, en keek met afgrijzen toe hoe mijn hele directory werd verwijderd. Oeps.

Het probleem is dat “terugzetten” een commit is niet hetzelfde als het unstaging van de wijzigingen, en kan onverwachte effecten hebben op je lokale bestanden die alleen via Git kunnen worden verholpen. Dit lijkt een serieus probleem totdat je je realiseert dat alle gegevens nog steeds zijn opgeslagen in de .git/-map van je repository, zodat deze kan worden hersteld.

Advertentie

Het helpt niet dat het een vreemde naam heeft, en de eigenlijke manier om een ​​ongewenste commit te verwijderen is door een "zachte reset" uit te voeren. terug naar de laatste commit achter de HEAD. Dus, de volgende keer, als je een vastlegging ongedaan wilt maken (om je wijzigingen te bewerken en opnieuw vast te leggen), gebruik dan het volgende commando:

git reset HEAD~1

Voor verduidelijking is dit geen “harde” reset, waarmee ook al je lokale wijzigingen worden verwijderd.

Teruggedraaide commits herstellen

De oplossing is vrij eenvoudig. Telkens wanneer u een “git revert doet,” Git maakt een nieuwe commit met tegengestelde wijzigingen aan de commit die worden teruggedraaid. Als je een bestand hebt gemaakt, wordt dat bestand verwijderd en de vastlegging weerspiegelt dat.

De oplossing is om die terugdraaiende commit toe te passen en vervolgens terug te zetten, waardoor de wijzigingen ongedaan worden gemaakt. Dit werkt zelfs als de revert-commit niet in de HEAD van je repository staat; anders zou een harde reset ook werken en je repo bevrijden van gênante "revert" en “terugdraaien” commits waar je collega's om zullen lachen.

Om de hash voor de commit te vinden, kun je git log uitvoeren:

Kopieer deze hash en voer git revert:

git revert 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0f

Dit zou de repository moeten repareren, hoewel je misschien de keer handmatig terug als de automatische vastlegging is mislukt.

Advertentie

In de meeste GUI Git-clients is het proces extreem eenvoudig. Klik gewoon op “terugzetten” op de commit.

Terugkeren zonder een spoor achter te laten

Als je aan het HEAD van je commit tree bent, en je zou dit willen doen zonder nieuwe commits te maken, en je hebt ;t de wijziging nog niet gepusht, je kunt je lokale branch hard resetten naar de oude commit.

git reset –hard HEAD^

De reden dat dit een harde reset moet zijn is omdat een zachte reset nog steeds de niet-gefaseerde wijzigingen van de terugkeer. U wilt resetten zonder de lokale wijzigingen.

U kunt ook een zachte reset uitvoeren en de lokale wijzigingen handmatig verwijderen.


Posted

in

by

Tags: