Vi ska börja med att lägga till några filer. Vid det senaste engagemanget ska vi både lägga till och ta bort filer för att skapa en rörig situation. Sedan kommer vi att återgå till staten före kaoset.
Du kan skapa en mapp som heter / testa och köra följande kommandon för att initialisera Git och skapa situationen som beskrivs ovan (Vi gör avsiktligt separata åtaganden för att skapa en historik):
$ git initInitierat tomt Git-arkiv i / Användare / zakh_eecs / _work / LearnGIT / git_revert / test /.git /
$ echo x> file_1.Text
$ git add -A
$ git commit -m "Lägger till fil_1.Text"
[master (root-commit) 08caf5d] Lägger till file_1.Text
1 fil ändrad, 1 infogning (+)
skapa läge 100644 file_1.Text
$ echo y> file_2.Text
$ git add -A
$ git commit -m "Lägger till fil_2.Text"
[master ba18a2f] Lägger till fil_2.Text
1 fil ändrad, 1 infogning (+)
skapa läge 100644 file_2.Text
$ echo z> file_3.Text
$ git add -A
$ git commit -m "Lägger till file_3.Text"
[master 97f09ad] Lägger till fil_3.Text
1 fil ändrad, 1 infogning (+)
skapa läge 100644 file_3.Text
$ echo u> file_4.Text
$ git add -A
$ git commit -m "Lägger till file_4.Text"
[master 9caf084] Lägga till fil_4.Text
1 fil ändrad, 1 infogning (+)
skapa läge 100644 file_4.Text
$ echo v> file_5.Text
$ git add -A
$ git commit -m "Lägger till file_5.Text"
[master 3f228b2] Lägga till fil_5.Text
1 fil ändrad, 1 infogning (+)
skapa läge 100644 file_5.Text
Om vi kontrollerar vår mapp bör vi se följande situation:
$ ls -1file_1.Text
file_2.Text
fil_3.Text
fil_4.Text
fil_5.Text
Om vi kontrollerar historiken bör vi ha följande filer:
$ git log - online3f228b2 Lägger till fil_5.Text
9caf084 Lägger till fil_4.Text
97f09ad Lägger till fil_3.Text
ba18a2f Lägger till fil_2.Text
08caf5d Lägger till fil_1.Text
Låt oss nu skapa lite förödelse, vi ska ta bort några filer och lägga till en dålig fil.
$ rm file_2.Text$ rm file_4.Text
$ echo w> min_bad_fil.Text
$ git add -A
$ git commit -m "Tillagda och raderade filer utan att tänka på konsekvenser"
[master 879fbf8] Lade till och raderade filer utan att tänka på konsekvenser
3 filer har ändrats, 1 infogning (+), 2 raderingar (-)
ta bort läge 100644 file_2.Text
ta bort läge 100644 file_4.Text
skapa läge 100644 my_bad_file.Text
Nu är detta villkoren för vår mapp:
$ ls -1file_1.Text
fil_3.Text
fil_5.Text
min_bad_fil.Text
Och detta är villkoren för vår historia:
$ git log - online879fbf8 Tillagda och raderade filer utan att tänka på konsekvenser
3f228b2 Lägger till fil_5.Text
9caf084 Lägger till fil_4.Text
97f09ad Lägger till fil_3.Text
ba18a2f Lägger till fil_2.Text
08caf5d Lägger till fil_1.Text
Vi inser att vi inte vill ha det senaste åtagandet 879fbf8. Så vi använder följande återkommandot:
$ git återgår 879fbf8Det öppnar ett textfönster för redigering av den automatiska kommentaren:
Återställ "Tillagda och raderade filer utan att tänka på konsekvenser"Detta återställer åtagande 879fbf849c4bd6fb9a377604d6355c76b92a832c.
# Ange engagemangsmeddelandet för dina ändringar. Linjer börjar
# med '#' ignoreras och ett tomt meddelande avbryter åtagandet.
# På filialmästare
# Ändringar som ska göras:
# Ny fil: file_2.Text
# Ny fil: file_4.Text
# Borttagen: min_bad_fil.Text
#
Du kan ändra kommentaren. Vi kommer att behålla det som det är. Så snart du sparar kommentarfönstret kommer återuppgiften att äga rum:
$ git återgår 879fbf8[master 6e80f0e] Återställ "Tillagda och raderade filer utan att tänka på konsekvenser"
3 filer har ändrats, 2 infogningar (+), 1 radering (-)
skapa läge 100644 file_2.Text
skapa läge 100644 file_4.Text
ta bort läge 100644 my_bad_file.Text
Låt oss titta på vår mapp nu:
$ ls -1file_1.Text
file_2.Text
fil_3.Text
fil_4.Text
fil_5.Text
Våra filer är tillbaka i ordning som tidigare. Alla tillägg och raderingar har återställts. Låt oss kontrollera loggen:
$ git log - online6e80f0e Återställ "Tillagda och raderade filer utan att tänka på konsekvenser"
879fbf8 Tillagda och raderade filer utan att tänka på konsekvenser
3f228b2 Lägger till fil_5.Text
9caf084 Lägger till fil_4.Text
97f09ad Lägger till fil_3.Text
ba18a2f Lägger till fil_2.Text
08caf5d Lägger till fil_1.Text
Det finns ett nytt åtagande 6e80f0e. Eventuella ändringar som ingick i 879fbf8 ångrades och sedan begicks 6e80f0e.
Varning: Med kommandot Git reset kan du också ångra åtaganden. Men i återställningsfallet (särskilt hård återställning) skulle det ha tagit bort 879fbf8 begå som det aldrig hände och det skulle ha varit nej 6e80f0e begå. Med ett återvändande kommando kan alla se de förändringar som har ägt rum. I återställningsfallet finns inget spår kvar. Så det är en dålig idé att använda reset-kommandot i ett offentligt arkiv eftersom det kan orsaka massförvirring. Den gyllene regeln är - använd inte återställning i offentliga arkiv, använd återvänd som är säkrare.
Sammanfattningsvis:
Kommandot Git revert är ett snabbt och bekvämt sätt att åtgärda dina misstag. Det är ett kommando du bör komma ihåg om du arbetar regelbundet med Git.
Ytterligare studier:
- https: // git-scm.com / docs / git-revert
- https: // git-scm.com / docs / git-reset
- Git: Lär dig versionskontroll med Git: En steg-för-steg-guide för nybörjare
- Versionskontroll med Git: Kraftfulla verktyg och tekniker för gemensam mjukvaruutveckling
- Pro Git, 2: a upplagan