Git hvordan du kan gå tilbake til siste forpliktelse?

Git hvordan du kan gå tilbake til siste forpliktelse?
Git er et effektivt verktøy som holder oversikt over koden din. Og en av de flotte funksjonene i verktøyet er at du enkelt kan sjekke historien din og gå tilbake hvis du har gjort en feil. La oss skape en situasjon der du kan vende tilbake den siste forpliktelsen og se hvordan GIT REVERT -kommandoen fungerer.

Vi skal begynne med å legge til noen få filer. På den siste forpliktelsen skal vi både legge til og slette filer for å skape en rotete situasjon. Så kommer vi til å gå tilbake til staten før kaoset.

Du kan opprette en mappe som heter /teste og kjøre følgende kommandoer for å initialisere GIT og opprette situasjonen beskrevet ovenfor (vi gjør med vilje separate forpliktelser for å lage en historie):

$ git init
Initialisert tom Git -depot i/brukere/zakh_eecs/_work/learngit/git_revert/test/.git/
$ ekko x> file_1.tekst
$ git add -a
$ git commit -m "legge til file_1.tekst"
[master (root-commit) 08caf5d] legge til fil_1.tekst
1 Fil endret, 1 innsetting (+)
Opprett modus 100644 File_1.tekst
$ ekko y> file_2.tekst
$ git add -a
$ git commit -m "legge til file_2.tekst"
[Master Ba18a2f] Legge til fil_2.tekst
1 Fil endret, 1 innsetting (+)
Opprett modus 100644 File_2.tekst
$ ekko z> file_3.tekst
$ git add -a
$ git commit -m "legge til file_3.tekst"
[Master 97f09ad] Legge til fil_3.tekst
1 Fil endret, 1 innsetting (+)
Opprett modus 100644 File_3.tekst
$ ekko u> file_4.tekst
$ git add -a
$ git commit -m "legge til file_4.tekst"
[Master 9caf084] Legge til fil_4.tekst
1 Fil endret, 1 innsetting (+)
Opprett modus 100644 File_4.tekst
$ ekko v> file_5.tekst
$ git add -a
$ git commit -m "legge til file_5.tekst"
[Master 3F228B2] Legge til fil_5.tekst
1 Fil endret, 1 innsetting (+)
Opprett modus 100644 File_5.tekst

Hvis vi sjekker mappen vår, bør vi se følgende situasjon:

$ LS -1
File_1.tekst
File_2.tekst
File_3.tekst
File_4.tekst
File_5.tekst

Hvis vi sjekker historien, bør vi ha følgende filer:

$ git log --oneline
3F228B2 Legge til fil_5.tekst
9CAF084 Legge til File_4.tekst
97F09AD Legge til File_3.tekst
Ba18a2f Legge til fil_2.tekst
08CAF5D Legge til File_1.tekst

La oss nå lage noen ødeleggelser, vi kommer til å slette noen få filer og legge til en dårlig fil.

$ rm file_2.tekst
$ rm file_4.tekst
$ ekko w> my_bad_file.tekst
$ git add -a
$ git commit -m "lagt til og slettet filer uten å tenke på konsekvenser"
[Master 879fbf8] Lagt til og slettet filer uten å tenke på konsekvenser
3 filer endret, 1 innsetting (+), 2 slettinger (-)
slettemodus 100644 file_2.tekst
slettemodus 100644 file_4.tekst
Opprett modus 100644 my_bad_file.tekst

Nå er dette tilstanden til mappen vår:

$ LS -1
File_1.tekst
File_3.tekst
File_5.tekst
my_bad_file.tekst

Og dette tilstanden til vår historie:

$ git log --oneline
879FBF8 Lagt til og slettet filer uten å tenke på konsekvenser
3F228B2 Legge til fil_5.tekst
9CAF084 Legge til File_4.tekst
97F09AD Legge til File_3.tekst
Ba18a2f Legge til fil_2.tekst
08CAF5D Legge til File_1.tekst

Vi innser at vi ikke vil ha den siste forpliktelsen 879fbf8. Så vi bruker følgende REVERT -kommandoen:

$ git REVERT 879FBF8

Det vil åpne for et tekstvindu for redigering av den automatiske kommentaren:

Gå tilbake "lagt til og slettet filer uten å tenke på konsekvenser"
Dette vender tilbake til å forplikte 879fbf849c4bd6fb9a377604d6355c76b92a832c.
# Vennligst skriv inn forpliktelsesmeldingen for endringene dine. Linjer som starter
# med '#' vil bli ignorert, og en tom melding aborterer forpliktelsen.
# On Branch Master
# Endringer som skal forpliktet:
# Ny fil: file_2.tekst
# Ny fil: file_4.tekst
# slettet: my_bad_file.tekst
#

Du kan endre kommentaren. Vi kommer til å beholde det som det er. Så snart du lagrer kommentarvinduet, vil tilbakestilling av oppgaven finne sted:

$ git REVERT 879FBF8
[Master 6e80f0e] Gjennomfør "Lagt til og slettet filer uten å tenke på konsekvenser"
3 filer endret, 2 innsettinger (+), 1 sletting (-)
Opprett modus 100644 File_2.tekst
Opprett modus 100644 File_4.tekst
slettemodus 100644 my_bad_file.tekst

La oss se på mappen vår nå:

$ LS -1
File_1.tekst
File_2.tekst
File_3.tekst
File_4.tekst
File_5.tekst

Filene våre er tilbake i rekkefølge som før. Alle tilleggene og slettingene er tilbakeført. La oss sjekke loggen:

$ git log --oneline
6E80F0E REVERT "Lagt til og slettet filer uten å tenke på konsekvenser"
879FBF8 Lagt til og slettet filer uten å tenke på konsekvenser
3F228B2 Legge til fil_5.tekst
9CAF084 Legge til File_4.tekst
97F09AD Legge til File_3.tekst
Ba18a2f Legge til fil_2.tekst
08CAF5D Legge til File_1.tekst

Det er en ny forpliktelse 6e80f0e. Eventuelle endringer som var en del av 879fbf8 ble angre og deretter forpliktet seg i 6e80f0e.

Advarsel: GIT RESET -kommandoen lar deg angre forpliktelser også. Men i tilbakestillingssaken (spesielt hard tilbakestilling), ville den ha slettet 879fbf8 forpliktelse som om det aldri skjedde, og det hadde ikke vært noen 6e80f0e begå. Med en tilbakevendende kommando kan alle se endringene som har funnet sted. I tilbakestillingssaken er det ingen spor igjen. Så det er en dårlig idé å bruke RESET -kommandoen i et offentlig depot fordi det kan forårsake masseforvirring. Den gylne regelen er - ikke bruk tilbakestilling i offentlige depoter, bruk tilbakevending som er tryggere.

For å konkludere:

GIT REVERT -kommandoen er en rask og praktisk måte å avhjelpe feilene dine. Det er en kommando du bør huske hvis du jobber regelmessig med Git.

Videre studier:

  • https: // git-cm.com/docs/git-reverte
  • https: // git-cm.com/docs/git-reset
  • Git: Lær versjonskontroll med Git: En trinn-for-trinns Ultimate Beginners Guide
  • Versjonskontroll med Git: Kraftige verktøy og teknikker for samarbeidsprogramvareutvikling
  • Pro git, 2. utgave