Hoe een commit van Github te verwijderen?

0
264

Als je per ongeluk iets hebt gepleegd dat je niet had moeten doen, en gepusht naar Github, zijn er nog steeds manieren om het te verwijderen of te wijzigen. Meestal wil je niet met de geschiedenis van Git knoeien, maar in sommige gevallen kan het veilig zijn als het goed wordt gedaan.

Doe dit niet als je het kunt vermijden

Het verwijderen van commits uit de Git-geschiedenis is over het algemeen een slecht idee. Git is bedoeld om elke versie van je bestanden bij te houden, en er zijn altijd alternatieven voor verwijdering, zoals git revert, die de geschiedenis intact houdt.

Zodra het op een externe repository staat , zoals Github, is het veel moeilijker om de commit volledig te verwijderen. Dit komt omdat iedereen die de repo gebruikt, zijn eigen lokale kopie van die repo heeft, en het geforceerd verwijderen van een commit zal ervoor zorgen dat ze niet meer synchroon lopen.

Er zijn echter nog steeds een paar redenen om dit te doen: misschien heb je per ongeluk privégegevens vastgelegd in een openbare opslagplaats, die nog steeds zichtbaar zijn in de geschiedenis, wat je ook doet. Het zal wat problemen veroorzaken voor uw collega's, maar zelfs in dit geval is het mogelijk met een geforceerde push.

Commits lokaal oplossen

Als je lokaal werkt en je hebt je wijzigingen nog niet naar Github gepusht, kun je commits die niet op de afstandsbediening staan, veilig resetten of wijzigen. Git houdt je lokale directory bij, voert wijzigingen intern uit en houdt een Git-geschiedenis bij. Dit wordt allemaal gesynchroniseerd met de afstandsbediening, maar alleen bij het uitvoeren van push/pull. Github geeft niets om de staat van je repo totdat je pusht.

< /p> Advertentie

Als je net een fout hebt gemaakt bij het vastleggen van bestanden, kun je een zachte reset uitvoeren en een nieuwe vastlegging doen. Dit is eigenlijk alledaags en handig als je meerdere commits in één wilt samenvoegen, genaamd “squashing.” Als u de wijzigingen volledig ongedaan wilt maken, kunt u dat ook doen (met een –harde reset).

Als je nog niet naar Github hebt gepusht, kun je de meest recente commit terugzetten met een zachte reset, wat helemaal geen effect heeft op je lokale bestanden, maar ervoor zorgt dat je de wijzigingen nooit in Git hebt vastgelegd in de eerste plaats.

git reset –soft HEAD~

Als je gewoon een nieuw bestand/wijziging wilt toevoegen aan de meest recente commit, heeft Git een ingebouwde vlag om precies dat te doen:

git commit –amend –no-edit

Terugzetten (Github Safe)

Als je de wijzigingen van een commit die je al naar Github hebt gepusht, ongedaan wilt maken, is de veilige manier om dat te doen met een teruggave. Terugzetten genereert een “tegenovergestelde commit,” die in principe alle wijzigingen van een specifieke commit ongedaan maakt. Als je een regel hebt toegevoegd, wordt deze verwijderd en als je een bestand hebt verwijderd, wordt het weer toegevoegd.

Dit is veilig omdat het de geschiedenis niet verandert, alleen voegt er nieuwe geschiedenis aan toe. Je kunt de terugzet-commit naar Github pushen en je collega's git pull laten uitvoeren om de updates te krijgen.

Voer eerst git log uit om een ​​lijst met commits te krijgen:

Kopieer dan de SHA1-hash en zet de commit terug:

git revert 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0f

Forceer reset (onveilig)

Als je echt wilt om een ​​commit te verwijderen, is de methode om dat te doen, deze lokaal te verwijderen en vervolgens push naar Github te forceren. Aangezien dit erg gevaarlijk . isen de lokale repositories van je collega kan verknoeien, als je dat nog steeds wilt, moet je misschien de force push branch-beveiliging uitschakelen in de repository-instellingen van Github:

Advertisement

Vervolgens kun je de commit lokaal verwijderen, wat het gemakkelijkst is als het de laatste is commit:

git reset –soft HEAD~

Je kunt ook een interactieve rebase doen, wat handig is als de commit niet de meest recente is. Als de commit bijvoorbeeld 12 commits geleden was, kun je vanaf dat moment rebasen, de gewraakte commit verwijderen en opslaan.

git rebase -i HEAD~12

Zodra je lokale repo in goede staat is, kun je kan push naar Github forceren.

git push origin master –force

Zorg ervoor dat je repo up-to-date is! Als de remote branch veranderingen heeft die jij niet hebt, ze zullen worden overschreven door deze push.

Misschien wilt u dit met uw teamleden afstemmen, aangezien u ze misschien moet pingen en hen moet vertellen om een ​​fetch uit te voeren en te resetten:

git fetch git reset origin/master –soft

Een toewijzing naar een andere vertakking verplaatsen

Als je per ongeluk de verkeerde vertakking hebt vastgelegd en de commit en verplaats het naar de juiste branch, er zijn tools in Git om dat af te handelen. Je kunt onze gids voor het verplaatsen van commits lezen voor meer informatie, maar dezelfde principes zijn van toepassing: als je een commit volledig moet verwijderen, moet je reset forceren. Als je het goed vindt om terug te keren, kun je gewoon teruggaan en kiezen.