Krajnji vodič za Git Reset i Git Revert

Dobro došli u naš krajnji vodič za git resette git revertnaredbe. Ovaj tutorial naučit će vas svemu što trebate znati o ispravljanju uobičajenih pogrešaka i poništavanju loših obveza tijekom korištenja Gita.

Shvatite tri odjeljka Git projekta

Git projekt ima sljedeća tri glavna dijela:

  1. Git direktorij
  2. Radni direktorij (ili radno stablo)
  3. Područje uprizorenja

Git imenik (nalazi se YOUR-PROJECT-PATH/.git/), gdje Git pohranjuje sve to treba precizno pratiti projekt. To uključuje metapodatke i bazu podataka objekata koja uključuje komprimirane verzije projektnih datoteka.

Radni direktorij gdje korisnik napravi lokalne promjene u projektu. Radni direktorij povlači datoteke projekta iz baze podataka objekata Git direktorija i smješta ih na lokalni korisnički stroj korisnika.

Napomena: Imenik je poznat i kao Repozitorij ili repo kratkog oblika. Repo na korisnikovom lokalnom stroju naziva se "Lokalni repo", dok se repo na git poslužitelju naziva "Udaljeni repo".

Područje uprizorenja je datoteka (koja se naziva i "indeks", "pozornica" ili "predmemorija") koja pohranjuje informacije o tome što će ući u vaš sljedeći urezivanje. Zarezivanje je kada kažete Gitu da spremi ove postupne promjene. Git pravi snimku datoteka kakve jesu i trajno ih pohranjuje u Git direktorij.

S tri odjeljka, postoje tri glavna stanja u kojima se datoteka može nalaziti u bilo kojem trenutku: izmijenjena, predana ili inscenirana. Datoteku mijenjate svaki put kad je promijenite u svom radnom direktoriju. Dalje, postavlja se na scenu kad ga premjestite na područje inscenacije. Napokon, počinjeno je nakon urezivanja.

Vraćanje Gita

git resetNaredba omogućuje vam da biste poništili trenutni glavu u određenom stanju. Možete resetirati stanje određenih datoteka kao i cijele grane. Ovo je korisno ako još niste gurnuli svoje urezivanje na GitHub ili neko drugo udaljeno spremište.

Resetirajte datoteku ili skup datoteka

Sljedeća naredba omogućuje vam selektivno biranje dijelova sadržaja te njegovo vraćanje ili uklanjanje iz kotača.

git reset (--patch | -p) [tree-ish] [--] [paths]

Poništite fajl datoteke

Ako ste datoteku premjestili u scensko područje pomoću git add, ali više ne želite da ona bude dio git reseturezivanja , možete je odvojiti od datoteke:

git reset HEAD FILE-TO-UNSTAGE

Promjene koje ste napravili i dalje će biti u datoteci, ova naredba samo uklanja tu datoteku s vašeg mjesta za postavljanje.

Vratite granu na prethodno urezivanje

Sljedeća naredba resetira HEAD vaše trenutne grane na zadanu COMMITi ažurira indeks. U osnovi se premotava stanje vaše grane, a zatim svi prijevodi koje napravite prema naprijed prepisuju sve što je došlo nakon točke resetiranja. Ako izostavite MODE, zadane vrijednosti su --mixed:

git reset MODE COMMIT

Opcije za MODEsu:

  • --soft: ne resetira indeksnu datoteku ili radno stablo, već resetira HEAD na commit. Mijenja sve datoteke u "Promjene koje će se izvršiti"
  • --mixed: resetira indeks, ali ne i radno stablo i izvještava o onome što nije ažurirano
  • --hard: resetira indeks i radno stablo. Sve promjene datoteka koje se prate u radnom stablu commitse odbacuju
  • --merge: resetira indeks i ažurira datoteke u radnom stablu koje se razlikuju između commiti HEAD, ali zadržava one koje se razlikuju između indeksa i radnog stabla
  • --keep: resetira unose indeksa i ažurira datoteke u radnom stablu koje se razlikuju između commiti HEAD. Ako datoteka koja se razlikuje između commiti HEAD ima lokalne promjene, resetiranje se prekida

Važna napomena o tvrdim resetiranjima

Budite vrlo oprezni pri korištenju --hardopcije s, git resetjer resetira vaše urezivanje, scensko područje i vaš radni direktorij. Ako se ova opcija ne koristi pravilno, na kraju se može izgubiti napisan kod.

Git Revert

Both the git revert and git reset commands undo previous commits. But if you've already pushed your commit to a remote repository, it is recommended that you do not use git reset since it rewrites the history of commits. This can make working on a repository with other developers and maintaining a consistent history of commits very difficult.

Instead, it is better to use git revert, which undoes the changes made by a previous commit by creating an entirely new commit, all without altering the history of commits.

Revert a commit or set of commits

The following command lets you revert changes from a previous commit or commits and create a new commit.

git revert [--[no-]edit] [-n] [-m parent-number] [-s] [-S[]] … git revert --continue git revert --quit git revert --abort

Common options:

 -e --edit
  • Ovo je zadana opcija i ne mora biti izričito postavljena. Otvara zadani uređivač teksta u vašem sustavu i omogućuje vam uređivanje nove poruke urezivanja prije urezivanja vraćanja.
  • Ova opcija radi suprotno -ei git revertneće otvoriti uređivač teksta.
  • Ova opcija sprječava git revertponištavanje prethodnog urezivanja i stvaranje novog. Umjesto stvaranja novog urezivanja, -nponištit će promjene iz prethodnog urezivanja i dodati ih u indeks staginga i radni direktorij.
 --no-edit
-n -no-commit

Primjer.

Zamislimo sljedeću situaciju: 1.) Radite na datoteci i dodajete i urezujete svoje promjene. 2.) Zatim radite na nekoliko drugih stvari i napravite još nekih obveza. 3.) Sad shvaćate, prije tri ili četiri urezivanja učinili ste nešto što biste željeli poništiti - kako to možete učiniti?

You might be thinking, just use git reset, but this will remove all of the commits after the one you would like to change - git revert to the rescue! Let's walk through this example:

mkdir learn_revert # Create a folder called `learn_revert` cd learn_revert # `cd` into the folder `learn_revert` git init # Initialize a git repository touch first.txt # Create a file called `first.txt` echo Start >> first.txt # Add the text "Start" to `first.txt` git add . # Add the `first.txt` file git commit -m "adding first" # Commit with the message "Adding first.txt" echo WRONG > wrong.txt # Add the text "WRONG" to `wrong.txt` git add . # Add the `wrong.txt` file git commit -m "adding WRONG to wrong.txt" # Commit with the message "Adding WRONG to wrong.txt" echo More >> first.txt # Add the text "More" to `first.txt` git add . # Add the `first.txt` file git commit -m "adding More to first.txt" # Commit with the message "Adding More to first.txt" echo Even More >> first.txt # Add the text "Even More" to `first.txt` git add . # Add the `first.txt` file git commit -m "adding Even More to First.txt" # Commit with the message "Adding More to first.txt" # OH NO! We want to undo the commit with the text "WRONG" - let's revert! Since this commit was 2 from where we are not we can use git revert HEAD~2 (or we can use git log and find the SHA of that commit) git revert HEAD~2 # this will put us in a text editor where we can modify the commit message. ls # wrong.txt is not there any more! git log --oneline # note that the commit history hasn't been altered, we've just added a new commit reflecting the removal of the `wrong.txt`

And with that you're one step closer to getting your black belt in Git.