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.
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