Hvordan gi angre siste commit
Som programvareingeniør eller webutvikler kan vi kreve å skyve mange forpliktelser til Git-depotet vårt.
Imidlertid er det noen andre tilfeller der vi ønsker å forplikte filene som ikke vil bli presset til Git-depotet vårt. Før vi utsteder noen forpliktelse, kan det hende vi ønsker å implementere noen ekstra endringer noen ganger.
Som en effekt krever vi å angre den siste forpliktelsen gjennom vårt Git-lager. Vi vil se hvordan vi kan angre den siste forpliktelsen i dette emnet.
Angre Last Git Commit sammen med en tilbakestilling
Vi kan enkelt angre den siste git-commit ved å utføre kommandoen, dvs. 'git reset' sammen med et alternativ, dvs. '-myk' som vil beskytte alle endringene som er gjort i filene våre. Vi må beskrive forpliktelsen til å angre som er 'HEAD~1'.
Den siste commit av git vil bli slettet fra vårt Git repository.
$ git reset --soft HEAD~1
I denne notasjonen,
'HEAD~1': Det betyr at vi ønsker å tilbakestille denne HEAD til en enkelt commit før i loggens historie.
$ git log --oneline 3fad532 Last commit (HEAD) 3bnaj03 Commit before HEAD (HEAD~1) Vcn3ed5 Two commits before HEAD (HEAD~2)
Hva blir effekten av kommandoen ovenfor?
Kommandoen, dvs. 'git reset' kan sees på som en kommando, dvs. motsatt av 'git add' , egentlig setter inn filer i Git-indeksen.
Hvis du beskriver muligheten for '-myk' , Git vil ikke endre filene i indeksen eller den kjørende katalogen i det hele tatt.
For eksempel har vi inkludert to filer i vår nylige forpliktelse, selv om vi ønsker å implementere noen endringer i denne filen.
$ git log --oneline --graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 Second commit *7083e29 Initial repository commit
Som et resultat vil vi søke 'git reset' sammen med muligheten til '-myk' å angre den siste forpliktelsen og også implementere noen tilleggsendringer.
$ git reset --soft HEAD~1 $ git status
Over grenmesteren
Vår filial er master/origin ahead ved commit 1 (bruk 'git push' for å publisere våre lokale commits).
Endringer som skal foretas:
(apply 'git restore --staged …' to unstage)
ny fil: fil1
$ git log --oneline --graph *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit
Som vi kan se, er filen fortsatt i indeksen ved å angre den siste commit (endringer som skal begås) selv om commit ble slettet.
Vi har gjort den siste commit på depotet vårt.
Hard Reset Git commit
Vi kan vurdere i avsnittet ovenfor at vi enkelt kan angre den siste forpliktelsen og behold endringene gjort til en hvilken som helst fil i indeksen. Men i noen situasjoner ønsker vi ganske enkelt å fjerne endringene og forpliktelsene som er gjort til enhver fil.
Det er et mål med et alternativ, dvs. '-hard' .
For å angre den siste commit og fjerne hver endring i indeksen og katalogen, utfør en kommando, dvs. 'git reset' sammen med alternativet, dvs. '-hard' og beskriv en commit før kommando HEAD ('HEAD~1') .
$ git reset --hard HEAD~1
Hver commit og modifikasjon vil bli fjernet fra indeksen og katalogen etter bruk av '--hard' kommando. Så vi bør være forsiktige.
For eksempel har vi lagt inn en hvilken som helst ny fil kalt 'file1' til vårt Git-lager.
$ git log --oneline --graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit
Anta nå at vi ønsker å angre den siste forpliktelsen og fjerne hver endring.
$ git reset --hard HEAD~1
Nå er HEAD på 90f8bb1 Second commit
La oss nå sjekke tilstanden vår for git-depot.
$ git status
Over grenmesteren
Vår filial er moderne med master/origin (bruk 'git push'-kommando for å publisere våre lokale forpliktelser).
Nå er det ingenting å forplikte seg til, og arbeidstreet er rent.
Mixed Reset Git commit
Hold endringene i arbeidskatalogen vår, men IKKE i indeksen. Vi må bruke kommandoen, dvs ., 'git reset' sammen med alternativet, dvs. '-blandet' . Etter denne kommandoen må vi bare legge til 'HEAD~1' til den siste commit.
$ git reset --mixed HEAD~1
For eksempel har vi inkludert enhver fil med navnet 'file1' i enhver commit som vi trenger å angre.
$ git log --oneline --graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit
Ganske enkelt, vi utfører kommandoen, dvs. 'git reset' sammen med alternativet, dvs. '-blandet' for å angre den siste forpliktelsen.
Som et resultat har '-blandet' kommandoen er en 'blande' blant de harde og myke tilbakestillingene, så navnet.
Over grenmesteren
Vår filial er master/origin ahead ved commit 1 (bruk 'git push' for å publisere våre lokale commits).
Usporede filer: (bruk 'git add ...' for å legge til i det som vil forplikte)
file1
Ingenting inkludert for committing, men de usporede filene er tilstede (bruk 'git track' for sporing).
Så vi har oppdaget en annen praksis for å tilbakestille den siste commit ved å bevare modifikasjoner gjort på filene.
Angre siste forpliktelse sammen med tilbakestilling
Bruk kommandoen, dvs. 'git tilbake' og beskriv en forpliktelse som skal tilbakeføres, dvs. 'HODE' til historiens forpliktelse for å tilbakestille den siste Git-forpliktelsen.
$ git revert HEAD
Kommandoen 'git revert' er annerledes sammenlignet med kommandoen 'git reset' fordi den kan registrere enhver ny commit sammen med noen modifikasjoner definert ved å degenerere den siste commit.
Vi kan beskrive 'HEAD~1' med 'git reset'-kommandoen fordi denne tilbakestillingskommandoen vil sette et hvilket som helst nytt HEAD-sted mens den degenererte commit-en beskrevet.
Som et resultat vil vi forplikte endringene på nytt til noen filer for tilbakestilling og forplikte oss til å ikke utføres. Vi har lagt inn en ny fil for vårt Git-lager, men vi ønsker å degenerere denne forpliktelsen.
$ git log --oneline -graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit
Hvis du utfører kommandoen 'git revert', vil Git åpne tekstredigeringsprogrammet vårt for å utføre endringene automatisk.
En ny melding vil vises sammen med en ny commit-hash når vi er ferdige med å utføre en commit-melding.
[master 2d40a2c] Revert 'Added a new file named as file1' 1 file changed, 1 deletion(-) delete mode 100644 file1
Hvis vi må sjekke historien til Git igjen, kan vi legge merke til en ny forpliktelse som er lagt til for å angre den siste forpliktelsen gjennom depotet vårt.
$ 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