logo

Hoe je de laatste commit ongedaan kunt maken

Als software-ingenieur of webontwikkelaar moeten we mogelijk veel commits naar onze Git-repository pushen.

Er zijn echter enkele andere gevallen waarin we de bestanden willen vastleggen die niet naar onze Git-repository worden gepusht. Voordat we een commit uitbrengen, willen we misschien soms wat extra wijzigingen doorvoeren.

Als gevolg hiervan moeten we de laatste commit via onze Git-repository ongedaan maken. We zullen in dit onderwerp zien hoe we de laatste commit ongedaan kunnen maken.

Maak de laatste Git Commit ongedaan samen met een reset

We kunnen de laatste git commit gemakkelijk ongedaan maken door het commando uit te voeren, d.w.z. 'git-reset' samen met een optie, d.w.z. '-zacht' dat alle wijzigingen in onze bestanden beschermt. We moeten de commit die we ongedaan willen maken beschrijven met 'HEAD~1'.

De laatste commit van de git wordt verwijderd uit onze Git-repository.

 $ git reset --soft HEAD~1 

In deze notatie

'HOOFD~1': Het betekent dat we deze HEAD willen resetten naar een enkele commit eerder in de geschiedenis van het logbestand.

Linux voer cmd uit
 $ git log --oneline 3fad532 Last commit (HEAD) 3bnaj03 Commit before HEAD (HEAD~1) Vcn3ed5 Two commits before HEAD (HEAD~2) 

Wat zal het effect zijn van het bovenstaande commando?

Het commando, d.w.z. 'git-reset' kan worden gezien als een commando, d.w.z. het tegenovergestelde van de 'git toevoegen' , waarbij in wezen bestanden in de Git-index worden ingevoegd.

Als u de optie beschrijft van '-zacht' , zal Git de bestanden in de index of de uitvoeringsmap helemaal niet wijzigen.

We hebben bijvoorbeeld twee bestanden opgenomen in onze recente commit, hoewel we enkele wijzigingen in dit bestand willen implementeren.

 $ git log --oneline --graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 Second commit *7083e29 Initial repository commit 

Als gevolg hiervan zullen we solliciteren 'git-reset' samen met de optie van '-zacht' om de laatste commit ongedaan te maken en ook enkele aanvullende wijzigingen door te voeren.

 $ git reset --soft HEAD~1 $ git status 

Over de filiaalmeester

Onze branch is master/origin voor met commit 1 (pas 'git push' toe voor het publiceren van onze lokale commits).

conversie van datum naar tekenreeks

Aan te brengen wijzigingen:

 (apply 'git restore --staged …' to unstage) 

nieuw bestand: bestand1

 $ git log --oneline --graph *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit 

Zoals we kunnen zien, staat het bestand nog steeds in de index door de laatste commit ongedaan te maken (wijzigingen die moeten worden vastgelegd), hoewel de commit is verwijderd.

We hebben de laatste commit voor onze repository met succes uitgevoerd.

Git-commit voor harde reset

We kunnen in het bovenstaande gedeelte overwegen dat we dit gemakkelijk kunnen doen maak de laatste commit ongedaan en behoud de wijzigingen gedaan met elk bestand in de index. Maar in sommige situaties willen we eenvoudigweg de wijzigingen en commits die in een bestand zijn aangebracht, verwijderen.

Het is een doel van een optie, d.w.z. '-moeilijk' .

Linux-besturingssysteem

Om de laatste commit ongedaan te maken en elke wijziging binnen de index en directory te verwijderen, voert u een opdracht uit, d.w.z. 'git-reset' samen met de optie, d.w.z. '-moeilijk' en beschrijf een commit vóór het commando HEAD ('HOOFD~1') .

 $ git reset --hard HEAD~1 

Elke commit en wijziging zal uit de index en directory worden verwijderd na gebruik van de '--moeilijk' commando. We moeten dus voorzichtig zijn.

We hebben bijvoorbeeld elk nieuw bestand met de naam 'file1' vastgelegd in onze Git-repository.

 $ git log --oneline --graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit 

Stel nu dat we de laatste commit ongedaan willen maken en elke wijziging willen verwijderen.

 $ git reset --hard HEAD~1 

Nu is HEAD bezig met 90f8bb1 Tweede commit

Laten we nu de status van onze git-repository controleren.

 $ git status 

Over de filiaalmeester

Onze branch is eigentijds met master/origin (pas het 'git push' commando toe voor het publiceren van onze lokale commits).

vervang alles in string Java

Nu valt er niets meer te plegen, en de werkende boom is schoon.

Gemengde reset Git-commit

Bewaar wijzigingen binnen onze werkmap, maar NIET binnen de index. We moeten het commando toepassen, d.w.z ., 'git-reset' samen met de optie, d.w.z. '-gemengd' . Na dit commando moeten we de 'HEAD~1' eenvoudigweg aan de laatste commit toevoegen.

 $ git reset --mixed HEAD~1 

We hebben bijvoorbeeld elk bestand met de naam 'file1' opgenomen in elke commit die we ongedaan moeten maken.

 $ git log --oneline --graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit 

We voeren eenvoudigweg het commando uit, d.w.z. 'git-reset' samen met de optie, d.w.z. '-gemengd' voor het ongedaan maken van de laatste commit.

Als gevolg hiervan is de '-gemengd' opdracht is een 'mengen' tussen de harde en zachte reset, vandaar de naam.

Over de filiaalmeester

Onze branch is master/origin voor met commit 1 (pas 'git push' toe voor het publiceren van onze lokale commits).

Niet-bijgehouden bestanden: (pas 'git add …' toe om toe te voegen wat er zal worden vastgelegd)

 file1 

Er is niets inbegrepen voor het vastleggen, maar de niet-bijgehouden bestanden zijn aanwezig (pas 'git track' toe voor tracking).

We hebben dus een andere praktijk ontdekt om de laatste commit terug te draaien door de wijzigingen die in de bestanden zijn aangebracht te behouden.

bomen spreiden

Laatste commit ongedaan maken en terugzetten

Pas het commando toe, d.w.z. 'git terugzetten' en een commit beschrijven die moet worden teruggedraaid, d.w.z. 'HOOFD' naar de commit van de geschiedenis voor het terugdraaien van de laatste Git-commit.

 $ git revert HEAD 

Het commando 'git revert' is anders vergeleken met het commando 'git reset' omdat het elke nieuwe commit kan opnemen, samen met enkele wijzigingen die gedefinieerd zijn door het degenereren van de laatste commit.

We kunnen 'HEAD~1' beschrijven met het 'git reset' commando, omdat dit reset commando elke nieuwe HEAD-plaats zal instellen terwijl de beschreven commit degenereert.

Als gevolg hiervan zullen we de wijzigingen opnieuw vastleggen in sommige bestanden, zodat deze worden teruggezet en worden vastgelegd dat deze niet worden uitgevoerd. We hebben elk nieuw bestand voor onze repository van Git gecommit, maar we willen deze commit ontaarden.

 $ git log --oneline -graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit 

Als je het commando 'git revert' uitvoert, zal Git onze teksteditor openen om de wijzigingen automatisch door te voeren.

Hoe je de laatste commit ongedaan kunt maken

Er zal een nieuw bericht verschijnen samen met een nieuwe commit-hash wanneer we klaar zijn met het uitvoeren van een commit-bericht.

 [master 2d40a2c] Revert 'Added a new file named as file1' 1 file changed, 1 deletion(-) delete mode 100644 file1 

Als we onze geschiedenis van Git opnieuw moeten controleren, kunnen we zien dat er een nieuwe commit is toegevoegd om de laatste commit via onze repository ongedaan te maken.

 $ git log --oneline --graph *2d40a2c (HEAD -> master) Revert 'Added a new file named file1' *1fa26e9 Added a new file named as file1 *ee8b133 Second commit *a3bdedf Initial commit