Koje su uobičajene Git pogreške i kako ih ispraviti?

Poništite najčešće greške tijekom izrade vašeg koda u alatu za git verzija sustava i zaštitite integritet podataka.

S procvatom tehnologije, postaje neizbježno da bilo koja IT osoba radi istovremeno na više podataka, a vaši se podaci s vremenom neprestano razvijaju. Također je bitno pratiti svaku promjenu podataka i biti spremni poništiti ili poništiti bilo koju neželjenu promjenu kada je to potrebno.

Moram priznati, verzija mojih podataka u Gitu omogućuje mi da budem eksperimentalniji u razvoju svog projekta. Ako zabrljam, znam da git uvijek može poništiti i / ili vratiti tu verziju mog projekta onakvom kakva je bila prije nego što sam zeznuo. Svaki sloj je dizajniran da omogući pregled i promjenu podataka i / ili ispravku promjena podataka prije premještanja podataka u sljedeću fazu. Dakle, slijede pogreške koje su obrađene na ovom blogu:





Datoteke / direktoriji izvan stupnja iz Indexa

Tijekom dodavanja i / ili mijenjanja datoteka često koristite uobičajeno ponašanje naredbe 'git add', a to je dodavanje svih datoteka i direktorija u Indeks.Često osjećate potrebu za uklanjanjem pojedinih datoteka ili njihovom posljednjom izmjenom prije nego što ih napravite.



Sintaksa: git resetiranje


uklanjanje datoteka iz indeksa - uobičajene git pogreške -Edureka

Poništavanje postavljanja datoteka iz područja indeksa daje vam još jednu priliku za ponovnu obradu podataka prije predavanja u lokalni repo.



Uredite zadnju uređenu poruku

Naredba: git commit --mend
Možete urediti najnoviju poruku urezivanja bez stvaranja nove. Da bih naveo dnevnike urezivanja, postavio sam nadimak 'hist':
Naredba: git config - globalni alias.hist 'log --pretty = format: '% C (žuti)% h% Creset% ad | % C (zeleno)% s% Creset% C (crveno)% d% Creset% C (plavo) [% an] '--graph --decorate --date = short'x


Nemojte mijenjati poruku urezivanja koja je već gurnuta u udaljeno spremište i podijeljena s drugima, jer bi to učinilo raniju povijest urezivanja nevaljanom i na taj način može utjecati na bilo koji rad temeljen na tome.

Zaboravio sam neke promjene u zadnjem urezivanju

Recimo da ste zaboravili izvršiti neke izmjene i već ste izvršili snimku, a također ne želite napraviti još jednu obvezu da biste istaknuli svoju pogrešku.
Naredba: git commit --mend


Istaknuo sam kako je ponovno stvoren i promijenjen id Sha-1 nedavnog objekta za predaju. Pretvarao sam se da sam napravio jedan objed kombinirajući obje promjene u jedno.

Odbacite lokalne promjene

Dakle, ovdje je slučaj kada sam modificirao datoteku ‘README’ i priredio je. Zatim sam istu datoteku po drugi put izmijenio, ali shvatio sam da ne želim drugu promjenu.

Sada, dopustite mi da ručno ne poništim cijelu promjenu, jednostavno mogu povući režiranu verziju datoteke.
Sintaksa:
git checkout -–Lokalne promjene u datoteci
git checkout -–Lokalne promjene u svim datotekama u direktorijumu & sramežljivo i sramežljivo

Naredba: git checkout - README

Dakle, odbacio sam svoje posljednje promjene u datoteci i prihvatio etapnu verziju datoteke. U sljedećem urezivanju, samo etažirana verzija datoteke ide u lokalno spremište.

Predani osobni podaci lokalnom spremištu

Želim ukloniti određene podatke iz lokalnog spremišta, ali datoteke zadržati u radnom direktoriju.
Sintaksa:
git reset --mixed HEAD ~
git reset - pomiješan

Naredba: git reset --mixed HEAD ~ 1
HEAD ~ 1 označava urezivanje neposredno prije nedavnog urezivanja koje pokazuje trenutna grana HEAD.

Datoteke u trenutnoj snimci uklonjene su i iz lokalnog spremišta i iz područja spremanja. Dodajte sljedeće uzorke u globalnu datoteku .gitignore da biste ih izuzeli iz git-a.
vim ~ / .gitignore_global
# datoteke lozinke #
*.proći
*.ključ
* .passwd

Ovim se uklanja urezivanje koje je imalo snimku datoteka lozinki i dobit ćete čisto mjesto za postavljanje. Moje datoteke su i dalje prisutne u mom radnom direktoriju, ali više nisu prisutne u lokalnom spremištu, a također neće biti gurane na udaljenom spremištu.

Oprez: Ako ih izgubite, git vam ih neće moći vratiti jer ne zna za to.

Zamijenite najnovije urezivanje novim urezivanjem

Sintaksa: git reset --soft [/ HEAD ~ n>]

Opcija ‘–soft’ samo uklanja uklonjene datoteke iz lokalnog spremišta dok su one još uvijek uprizorene u indeksu i možete ih ponovno urediti nakon pregleda. je sha-1 snimke koju želite ukloniti iz lokalnog repo-a. gdje je n broj predavanja prije predaje HEAD

Naredba :git reset --soft GLAVA ~ 1


Izmijenite datoteke i ponovno ih postavite

Naredba: git commit -m 'Dodavanje index.html i style.css'
Ispada da je vaša povijest urezivanja:

Upisali pogrešne podatke

Sintaksa:
git reset --hard HEAD ~ n– Resetirajte projekt na ‘n’ obveze prije posljednje snimljene snimke
git reset --tvrd– Resetirajte projekt na zadanu snimku id-a urezivanja

Naredba: git reset --hard HEAD ~ 1


Najnovije datoteke urezivanja i oštećenja uklanjaju se iz lokalnog spremišta, stupnjevačkog područja kao i iz radnog imenika.

Oprez: To je opasna naredba jer na kraju gubite datoteke u radnom direktoriju. Ne preporučuje se na udaljenom spremištu.

Vratite se u moje staro stanje projekta

Možete prijeći na starije stanje vašeg projekta u povijesti vremena. Ako zabrljate u najnovijoj verziji ili su vam potrebna poboljšanja u starijem kodu, možda ćete htjeti stvoriti drugu granu od te stare snimke projekta kako ne biste ometali vaš trenutni rad. Pogledajmo kako:
a. Navedite povijest projekta i odlučite za stariji id urezivanja, naredbu:ići hist
b. Iz ID-a urezivanja stvorite drugu granu:git checkout -b stara država e7aa9a5
c. Nastavite raditi na kodu i kasnije spojite / prebazujte s 'glavnom' granom.

Obnovite izbrisanu lokalnu granu

Moguće je obnoviti izgubljeni rad na referentnoj grani. Recimo, izbrisao sam granu 'stari_kod' bez spajanja s glavnom grankom i izgubio sam rad. I ne, ni grana nisam gurnuo u udaljeno spremište, što onda? Pa git tragovi i vodi zapisnik svih promjena izvršenih na svakoj referenci, da vidimo moju:idi reflog

Dakle, HEAD @ {2} je pokazivač kada sam prešao na granu 'stari_kôd', vratimo to:

Sintaksa:git checkout -b
Naredba:git checkout -b stari_kod HEAD @ {2}

Morate biti sada u grani 'stari_kôd' sa svojim najnovijim djelom u vrijeme njegovog stvaranja. Uz to, pokazivač 'reflog' na HEAD @ {1} bio je nedavni predaj izvršen na grani 'stari_kôd'. Da biste vratili ovaj jedinstveni commit samo pokrenite naredbu kao:git reset --hard HEAD @ {1}.Ovo također vraća modificirane datoteke u radni direktorij.

Ako želite detaljno znati kako ova naredba funkcionira i kako možete upravljati unosima 'reflog', možete pročitati i moj raniji post naoporavak izbrisane grane iz git reflog-a.

Poništi promjene izvršene u urezivanju

ićivratiti sekoristi se za bilježenje nekih novih obveza kako bi se preokrenuo učinak nekih ranijih izvršavanja.
Sintaksa: git revert
Iz svojih dnevnika obveza, želio bih poništiti promjenu učinjenu u istaknutom id-u predaje:

Naredba: git revert 827bc0d

Bolje je da ne resetirate dijeljene obveze na „teško“, već ih umjesto toga „git revert“ kako biste sačuvali povijest tako da svima bude lakše pronaći evidencije povijesti kako bi saznali što je tko vratio. i zašto?

Možete koristiti istu logiku upućivanja predavanja koja se tiču ​​pokazivača HEAD umjesto davanja ID-a urezivanja, kao u HEAD ~ 3 ili HEAD ~ 4 i tako dalje.

Dao pogrešno ime mojoj podružnici

Možete preimenovati naziv lokalne podružnice. Puno se puta dogodi da biste možda željeli preimenovati svoju poslovnicu na temelju problema na kojem radite, a da ne prođete bol zbog migracije cijelog svog posla s jednog mjesta na drugo. Na primjer, možete biti na istoj grani ili na drugoj grani i dalje moći preimenovati željenu granu kao što je prikazano dolje:
Sintaksa: git grana -m
Naredba: git grana -m stari_kod stari_ # 4920

Kao što se možda pitate drži li git zapis ovog preimenovanja? Da, odnosi se na vaše unose ‘reflog’, evo mojih:

Preimenovanje grane neće utjecati na njezinu granu za daljinsko praćenje. Vidjet ćemo u udaljenom odjeljku kako zamijeniti granu na udaljenom spremištu

traka napretka u html-u pomoću javascripta

Preuredite zapisnike povijesti prije nego što ih gurnete na daljinski

Kako bih volio da sam neke obveze napravio ranije od drugih, a neke uopće ne bih. Interaktivno preuređujte i uređujte stare obveze kako biste učinkovito popravili ili poboljšali kôd
Sintaksa: git rebase -i
Naredba: git rebase -i fb0a90e–Počnite s ponovnim postavljanjem obveza izvršenih nakon id-a urezivanja fb0a90e

Ponovno posjetite git rebase dokumentacija kako bi se razumjelo kako se '–interactive or -i' rebase razlikuje od uobičajene rebase.

Učinili nepovezane promjene u jedan predati

U ovom slučaju, trebate podijeliti stari zakopani urezivanje u više logičkih predavanja.
Sintaksa: git rebase -i
Naredba: git rebase -i fb0a90e
U uređivaču ponovne baze podataka morate odabrati e7aa9a5 id predavanja i promijeniti ga u 'uređivanje' umjesto u 'odabir'.

nepovezane promjene - uobičajene git pogreške -Edureka

Sad biste bili u projektnoj verziji urezivanja id-e7aa9a5. Prvo vratite povijest urezivanja i područje postavljanja na prethodnu naredbu urezivanja:git reset HEAD ~ 1
Drugo, uređivanje + faza + uređivanje datoteka pojedinačno
Naredbe:
git dodaj kôd && git commit -m 'Dodavanje početnih kodova'
git add newcode && git commit -m 'Dodavanje novog koda'

Treće, nastavite s bazom podataka i završite.

Naredba :git rebase --nastaviti
Četvrto, pregledajte povijest s dodatnim obvezama.

Naredba: ići hist

dijeljenje predavanja na više pomoću rebasea - česte git pogreške - Edureka

Promijenite e-adresu autora u svim obvezama na svim granama

Odavno izrađujem verzije i urezujem svoje projektne datoteke u git, ali do sada me nikada nije pogodilo da je moj id e-pošte ugrožen u mojim dnevnicima povijesti urezivanja koji su čak objavljeni na udaljenim spremištima. Pa, to se može dogoditi bilo kome kad u početku postavite konfiguracije u datoteci '.gitconfig'. Na moje olakšanje git može prepisati varijable okoline koje pružamo prilikom stvaranja objekta urezivanja.

Prvo dobivam popis ID-ovi e-pošte da odlučim one koje želim promijeniti:
Naredba: git log --all --pretty = format: '% an% d'–Ovo ispisuje ime autora (refname / ime grane)

Drugo, prolazim svaki predati na svakoj grani i ponovno napišite objekt urezivanja s novim ID-om e-pošte
Naredba:
git filter-grana --env-filter '
if ['$ GIT_AUTHOR_NAME' = 'divya']
zatim
GIT_AUTHOR_EMAIL = 'divya@github.com'
biti
' -- --svi

Izgubljene i pronađene datoteke

Pretpostavimo da ste izgubili određenu datoteku i ne sjećate se njenog naziva, ali biste se mogli prisjetiti određenih riječi u datoteci. U ovom slučaju možete slijediti ove korake-
Korak 1: Navedite sve obveze koje su ikad sadržavale snimku datoteke s pretraživanim uzorkom
Naredba :git rev-list - svi | xargs git grep -i 'vremenska oznaka'



Korak 2 : Stvorite novu granu 'izgubljeno-pronađeno' od ovog istaknutog id-a predavanja
Sintaksa: git checkout -b izgubljeno-pronađeno d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

Zaboravio sam u kojoj grani postoji moj commit-id

Ponekad, nakon što otkrijete id pogreške u pogrešci, možda biste poželjeli znati sve grane koje imaju ovo urezivanje na sebi kako biste ih mogli sve popraviti. Provjera povijesti svake podružnice nije vrlo praktična u velikom projektu s više podružnica.

Loš predavanje izvršeno u mojoj aplikaciji za izgradnju navigacije jednom je razbilo kôd, tada sam koristio Naredba 'git bisect' za otkrivanje pogrešnog ID-a urezivanja nakon čega slijedinaredba:git grana --sadržida nabroj grane s tim lošim predavanjem.

Dakle, sada znam sve grane koje još uvijek imaju loše urezivanje, mogao bih vratiti ili resetirati ovaj skup promjena.

Izbriši urezivanje iz povijesti

Ponekad osjećam potrebu samo izbrisati obvezu iz povijesti i ne ostaviti joj trag. Ne bih vam preporučio da isprobate ovaj trik na zajedničkoj grani, već samo na lokalnoj grani.
Sintaksa: git rebase -i
Naredba :git rebase -i 93859d8
U uređivaču rebase-> zamijenite 'edit' s 'drop' za istaknuti id urezivanja: 69f4813

U nekim slučajevima ovo ponovno pisanje može rezultirati sukobima. Morate riješiti sukobe, a zatim nastaviti dalje.

Upozorenje : Ovo je opasna naredba jer ovo prepisuje povijest i može izgubiti podatke. Takva se grana razlikuje od svog udaljenog kolege i morat će se gurnuti s--silaili- prisila uz zakupopcija.

Gurnuo pogrešnu granu na daljinski

Sada, evo što želim učiniti - želim izbrisati a udaljena grana i zaustaviti ga praćenje iz moje lokalne podružnice. 'git push'Naredba kada se koristi s--izbrisatiopcija briše udaljenu granu Dakle, ovako dobivam lokalnu kopiju kloniranog projekta -

git klon https://github.com/greets/myProj.git
cd myProj


Jednom kada se udaljena grana izbriše, drugi na dijeljenom repou moraju osvježiti i ažurirati svoje udaljene reference pomoću--obrezatimogućnost brisanja referenci na objekt koji nedostaje:git fetch --prune -v porijeklo

U ovom sam postu spomenuo neke od uobičajenih pogrešaka ili promjena koje vam git može pomoći u ispravljanju. Svaki je kod jedinstven i razvijen na svoj način, tako da postoje i različiti načini pristupanja i rješavanja problema. Uvijek biste se mogli pozvati na službenu osobu git dokumentacija da biste razumjeli kako razne git naredbe štite vaš izvorni kod i kako ih najbolje iskoristiti.

Sad kad ste shvatili uobičajene Git pogreške, pogledajte ovo Edureka, pouzdana tvrtka za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Edureka DevOps certifikacijski tečaj pomaže učenicima da shvate što je DevOps i steknu stručnost u raznim DevOps procesima i alatima kao što su Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack i GIT za automatizaciju više koraka u SDLC-u.

Imate pitanje za nas? Molimo vas spomenite to u odjeljku za komentare ove 'uobičajene Git pogreške', a mi ćemo vam se javiti