17. Fjerne en forpliktelse fra en gren
Mål
- For å lære å slette grenens siste forpliktelser
Revert
er en kraftig kommando fra forrige avsnitt som lar deg avbryte eventuelle forpliktelser til depotet. Imidlertid er både originale og kansellerte forpliktelser sett i historien av grenen (når du bruker git log
-kommandoen).
Ofte etter at en forpliktelse allerede er gjort, innser vi at det var en feil. Det ville være hyggelig å ha en angre kommando som gjør at feil (er) kan slettes umiddelbart. Denne kommandoen forhindrer at det vises en eller flere uønskede forpliktelser i git log
-historikken.
01 Tilbakestillingskommandoen
Vi har allerede brukt reset
-kommandoen for å matche buffersonen og den valgte forpliktelsen (HEAD-forpliktelse ble brukt i forrige leksjon).
Når en kommisjonsreferanse er gitt (dvs. en gren, et hash eller et kodenavn), blir reset
kommando vil …
- Overskriv den nåværende grenen slik at den vil peke på riktig forpliktelse
- Valgfritt tilbakestill buffersonen slik at den overholder den angitte forpliktelsen
- Tilbakestill arbeidskatalogen eventuelt slik at den samsvarer med den angitte forpliktelsen
02 Sjekk historikken vår
La oss gjøre en rask skanning av vår forpliktelseshistorikk .
Kjør:
git hist
Resultat:
Vi ser de to siste forpliktelsene i denne grenen er «Ups «og» Revert Oops «. La oss fjerne dem med kommandoen reset
.
03 Merk denne grenen først
La oss merke den siste forpliktelsen med tag, so you can find it after removing a commit(s).
Kjør:
git tag oops
04 Tilbakestill forpliktelse til forrige Oops
I historikkloggen over, forpliktelsen merket «v1» er før «Oops» og «Revert Oops» forplikter seg. La oss tilbakestille grenen til det punktet. Siden grenen har en tag, kan vi bruke taggenavnet i reset-kommandoen (hvis den ikke har en tag, kan vi bruke hash-verdien).
Kjør:
git reset --hard v1git hist
Resultat:
Vår hovedgren peker på commit v1 og «Revert Oops» og «Oops» forplikter eksisterer ikke lenger i grenen. --hard
-parameteren får arbeidskatalogen til å reflektere det nye avdelingshodet.
05 Ingenting går noen gang tapt
Hva skjedde med feil forpliktelser? De er fortsatt i depotet. Egentlig kan vi fortsatt henvise til dem. På begynnelsen av leksjonen opprettet vi «oops» -koden for den kansellerte forpliktelsen. La oss se på alle forpliktelser.
Kjør:
git hist --all
Resultat:
Vi kan se at feil forpliktelser er ikke borte. De er ikke oppført i hovedgrenen lenger, men forblir fortsatt i depotet. De ville fortsatt være i depotet hvis vi ikke merket dem, men da kunne vi bare referere til dem med deres hash-navn. Ikke-henviste forpliktelser forblir i depotet til søppeloppsamlingsprogramvaren kjøres av systemet.
06 Tilbakestill farer
Tilbakestillinger i lokale filialer er vanligvis ufarlige. Konsekvensene av en hvilken som helst «ulykke» kan tilbakestilles ved å bruke riktig kommisjon.
Imidlertid kan andre brukere som deler filialen forvirres hvis grenen deles på eksterne lagringssteder.