Katere so pogoste napake Git in kako jih odpraviti?



Razveljavite najpogostejše napake med različicami kode v orodju sistema za izdajanje različic git in zaščitite svojo integriteto podatkov.

Z razcvetom tehnologije postane neizogibno, da bi IT-delavec hkrati delal na več podatkih in vaši podatki se s časom nenehno spreminjajo. Prav tako je nujno slediti vsaki spremembi podatkov in biti pripravljen razveljaviti ali razveljaviti katero koli neželeno spremembo, kadar je to potrebno.

Moram priznati, da različice mojih podatkov v Gitu omogočajo, da sem bolj eksperimentalen pri razvoju svojega projekta. Če zamočim, vem, da ima git vedno možnost razveljaviti in / ali vrniti to različico mojega projekta v stanje, kakršno je bilo, preden sem zamočil. Vsak sloj je zasnovan tako, da omogoča pregledovanje in spreminjanje in / ali popravljanje sprememb podatkov, preden podatke premaknete v naslednji fazi. Sledijo torej napake, zajete v tem blogu:





php pretvori objekt v matriko

Nefazne datoteke / imeniki iz indeksa

Med dodajanjem in / ali spreminjanjem datotek pogosto uporabljate privzeto vedenje ukaza 'git add', to je dodajanje vseh datotek in imenikov v kazalo.Velikokrat se vam zdi, da morate nekatere datoteke predpripraviti ali še zadnjič spremeniti, preden jih zaženete.



Sintaksa: ponastavitev gita


odstraniti datoteke iz indeksa - pogoste napake git -Edureka

Odstranjevanje datotek iz območja Indeks vam daje še eno priložnost za ponovno obdelavo podatkov, preden se prijavite v lokalni repo.



Urejanje zadnjega predanega sporočila

Ukaz: git commit --amend
Najnovejše sporočilo o objavi lahko uredite, ne da bi ustvarili novo. Za seznam dnevnikov predaj sem nastavil vzdevek 'hist':
Ukaz: git config --global alias.hist 'log --pretty = format: '% C (rumeno)% h% Creset% ad | % C (zeleno)% s% Creset% C (rdeče)% d% Creset% C (modro) [% an] '--graph --decorate --date = short'x


Ne spreminjajte sporočila o odobritvi, ki je že potisnjeno v oddaljeno repozitorij in v skupni rabi z drugimi, saj bi to povzročilo neveljavno zgodovino predhodnih prevzemov in tako lahko vplivalo na kakršno koli delo, ki temelji na tem.

Pozabil sem nekaj sprememb v zadnji objavi

Recimo, da ste pozabili narediti nekaj sprememb in ste že posneli svoj posnetek, prav tako ne želite narediti nove objave, da bi poudarili svojo napako.
Ukaz: git commit --amend


Poudaril sem, kako je bil ponovno ustvarjen in spremenjen id sha-1 objekta nedavnega prevzema. Pretvarjal sem se, da sem naredil en sam prevzem, ki je združil obe spremembi v eno.

Zavrzite lokalne spremembe

Tukaj je primer, ko sem datoteko 'README' spremenil in uprizoril. Nato sem isto datoteko spremenil drugič, vendar sem ugotovil, da ne želim druge spremembe.

Zdaj naj ne bom razveljavil celotne spremembe ročno, preprosto lahko potegnem postopno različico datoteke.
Sintaksa:
git checkout -–Lokalne spremembe v datoteki
git checkout -–Lokalne spremembe v vseh datotekah v imeniku & sramežljivo in sramežljivo

Ukaz: git checkout - PREBERI

Torej sem zavrnil svoje zadnje spremembe datoteke in sprejel postopno različico datoteke. V naslednjem prevzemu gre samo lokalna različica datoteke v lokalni repozitorij.

Predani osebni podatki v lokalnem skladišču

Želim odstraniti nekatere podatke iz lokalnega repozitorija, vendar datoteke shraniti v delovni imenik.
Sintaksa:
git reset --mixed HEAD ~
git reset --mixed

Ukaz: git reset --mešana GLAVA ~ 1
HEAD ~ 1 označuje prevzem tik pred nedavnim prevzemom, ki ga kaže trenutna veja HEAD.

Datoteke v trenutnem posnetku so odstranjene tako iz lokalnega repozitorija kot iz uprizoritvenega območja. V globalno datoteko .gitignore dodajte naslednje vzorce, da jih git izključi iz sledenja.
vim ~ / .gitignore_global
# datoteke z geslom #
* .pas
* .key
* .passwd

S tem se objava, ki je imela posnetek datotek z geslom, odstrani in dobite čisto pripravljalno območje. Moje datoteke so še vedno prisotne v mojem delovnem imeniku, vendar niso več v lokalnem repozitoriju, prav tako ne bodo potisnjene v oddaljenem repozitoriju.

Pozor: Če jih izgubite, jih git ne bo mogel obnoviti, saj o tem ne ve.

Zamenjajte najnovejšo odobritev z novo

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

Možnost ‘–soft’ samo odstrani predane datoteke iz lokalnega repozitorija, medtem ko so še vedno uprizorjene v indeksu, in jih lahko po pregledu ponovno prevzamete. je sha-1 posnetka, ki ga želite odstraniti iz lokalnega repoja. kjer je n število prevzemov pred predajo HEAD

Ukaz :git reset --soft HEAD ~ 1


Spremenite datoteke in jih znova postavite

Ukaz: git commit -m 'Dodajanje index.html in style.css'
Zdaj se izkaže, da je bila vaša zgodovina predaj:

Zapisali napačne podatke

Sintaksa:
git reset --hard HEAD ~ n–Ponastavite projekt na „n“ se zaveže pred zadnjim posnetkom posnetka
git reset --hard–Ponastavite projekt na posnetek ID-ja odobritve

Ukaz: git reset --hard HEAD ~ 1


Zadnje datoteke za prevzem in poškodovane datoteke se odstranijo iz lokalnega repozitorija, pripravljalnega območja in delovnega imenika.

Pozor: To je nevaren ukaz, saj na koncu izgubite datoteke v delovnem imeniku. Ni priporočljivo za odlagališče v skupni rabi.

Vrnite se v moje staro stanje projekta

Lahko se pomaknete na starejše stanje vašega projekta v zgodovini časa. Če ste zamočili najnovejšo različico ali potrebujete izboljšave v starejši kodi, boste morda želeli iz tega starega posnetka projekta ustvariti še eno vejo, da ne bo oviral vašega trenutnega dela. Poglejmo, kako:
a. Navedite zgodovino projekta in se odločite za starejši id objave, ukaz:pojdi zgodov
b. Iz ID-ja objave ustvarite drugo vejo:git checkout -b staro stanje e7aa9a5
c. Nadaljujte z delom na kodi in kasneje združite / prenovite z vejo 'master'.

Obnovite izbrisano lokalno vejo

Izgubljeno delo je mogoče obnoviti na referenčni veji. Recimo, izbrisal sem vejo 'stara_koda', ne da bi se združil z glavno vejo, in izgubil delo. In ne, tudi podružnice nisem potisnil v oddaljeno repozitorij, kaj potem? No git skladbe in vodi dnevnik vnos vseh sprememb, opravljenih na vsaki referenci, poglejmo moje:pojdi reflog

Torej, HEAD @ {2} je kazalec, ko sem se preselil v vejo 'old_code', obnovimo to:

Sintaksa:git checkout -b
Ukaz:git checkout -b old_code HEAD @ {2}

Zdaj morate biti v veji 'old_code' s svojim najnovejšim delom ob njegovem ustvarjanju. Poleg tega je bil kazalnik 'reflog' na HEAD @ {1} nedavni prevzem v veji 'old_code'. Če želite obnoviti to edinstveno commit samo zaženite ukaz kot:git reset --hard HEAD @ {1}.S tem se obnovijo tudi spremenjene datoteke v delovnem imeniku.

Če želite podrobno vedeti, kako deluje ta ukaz in kako lahko upravljate vnose ‘reflog’, lahko preberete tudi mojo prejšnjo objavo naobnovitev izbrisane veje iz git reflog.

Razveljavi spremembe, opravljene v objavi

pojdipovrnitise uporablja za snemanje nekaterih novih zavez, da se obrne učinek nekaterih prejšnjih zavez.
Sintaksa: git revert
Iz svojih dnevnikov opravil bi rad razveljavil spremembo, ki je bila izvedena v označenem ID-ju objave:

Ukaz: git revert 827bc0d

Bolje je, da pogojev v skupni rabi ne ponastavite na „težko“, temveč jih „git revert“, da ohranite zgodovino, tako da bo vsem lažje izslediti dnevnike zgodovine in ugotoviti, kdo je bil povrnjen. in zakaj?

Uporabite lahko isto logiko sklicevanja na zaveze, ki se nanašajo na kazalnik HEAD, namesto da bi podali id ​​predaja, kot v HEAD ~ 3 ali HEAD ~ 4 itd.

Moji podružnici dal napačno ime

Ime lokalne podružnice lahko preimenujete. Velikokrat se zgodi, da boste morda želeli preimenovati svojo podružnico glede na težavo, s katero delate, ne da bi vas bolečina preselila z enega mesta na drugo. Na primer, lahko ste v isti ali drugi veji in še vedno lahko preimenujete želeno vejo, kot je prikazano spodaj:
Sintaksa: git podružnica -m
Ukaz: git podružnica -m old_code old_ # 4920

Kot se morda sprašujete, ali git vodi zapis tega preimenovanja? Da, sklicuje se na vaše vnose 'reflog', tukaj je moj:

Preimenovanje veje ne bo vplivalo na njeno vejo na daljavo. V oddaljenem odseku bomo videli, kako zamenjati vejo na oddaljenem repozitoriju

Pred potiskanjem na oddaljeno znova uredite dnevnike zgodovine

Kako bi si želel, da bi določene zaveze naredil prej kot druge, nekaterih pa sploh ne bi. Interaktivno preuredite in uredite stare zaveze, da učinkovito popravite ali izboljšate kodo
Sintaksa: git rebase -i
Ukaz: git rebase -i fb0a90e–Začnite preoblikovati prevzete obveznosti, ki so bile narejene po ID-ju odobritve fb0a90e

Ponovno obiščite git rebase dokumentacijo, da bi razumeli, kako se '–interactive ali -i' rebase razlikuje od običajne rebase.

kako uporabljati brskalnik

Izvezane nepovezane spremembe v en prevzem

V tem primeru morate staro zakopano zavezo razdeliti na več logičnih predaj.
Sintaksa: git rebase -i
Ukaz: git rebase -i fb0a90e
V urejevalniku ponovne zbirke podatkov morate izbrati id za objavo e7aa9a5 in ga spremeniti v 'edit' namesto 'pick'.

nepovezane spremembe - pogoste napake git -Edureka

Zdaj bi bili v različici projekta id-e7aa9a5 projekta. Najprej ponastavite zgodovino sprejema in uprizoritveno območje na prejšnji ukaz za prevzem:git reset HEAD ~ 1
Drugič, urejanje + stopnja + posamično datoteke
Ukazi:
git add code && git commit -m 'Dodajanje začetnih kod'
git add newcode && git commit -m 'Dodajanje nove kode'

Tretjič, nadaljujte s ponovnim zbiranjem podatkov in končajte.

Ukaz :git rebase --nastavi
Četrtič, ogled zgodovine z dodatnimi prevzemi.

Ukaz: pojdi zgodov

razdelitev zaveze na več z uporabo rebase - pogoste napake git - Edureka

Spremenite e-poštni naslov avtorja v vseh zavezah v vseh vejah

Že dolgo časa delam različice in urejam svoje projektne datoteke v git, toda do zdaj se mi ni nikoli zdelo, da je bil moj e-poštni ID ogrožen v mojih dnevnikih zgodovine predaj, ki so objavljeni celo v oddaljenih repozitorijih. No, to se lahko zgodi vsakomur, ko sprva nastavite konfiguracije v datoteki '.gitconfig'. ponovno napiši spremenljivke okolja, ki jih zagotavljamo pri ustvarjanju predmeta predaje.

Najprej dobim seznam e-poštni ID-ji da se odločim za tiste, ki jih želim spremeniti:
Ukaz: git log --all --pretty = format: '% an% d'–Ta natisne ime avtorja (refname / ime veje)

Drugič, tečem skozi vsak prevzem na vsaki veji in znova napišite predmet predaje z novim e-poštnim ID-jem
Ukaz:
git filter-branch --env-filter '
če ['$ GIT_AUTHOR_NAME' = 'divya']
potem
GIT_AUTHOR_EMAIL = 'divya@github.com'
biti
'- - vse

Izgubljene in najdene datoteke

Recimo, da ste izgubili določeno datoteko in se ne spomnite njenega imena, vendar bi lahko v njej priklicali določene besede. V tem primeru lahko sledite tem korakom -
Korak 1: Navedite vse zaveze, ki so kdaj vsebovale posnetek datoteke, z iskanim vzorcem
Ukaz :git rev-list --all | xargs git grep -i 'časovni žig'



2. korak : Ustvari novo vejo »izgubljeno-najdeno« iz tega označenega id-prevoda
Sintaksa: git checkout -b izgubljeno-najdeno d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

Pozabil sem, v kateri podružnici je moj id za prevzem

Včasih, ko zaznate identifikacijsko oznako napake, boste morda želeli vedeti tudi o vseh vejah, ki imajo to objavo, da jih boste lahko vse popravili. Preverjanje zgodovine vsake podružnice v velikem projektu z več podružnicami ni zelo praktično.

Slab prevzem v moji aplikaciji za gradnjo navigacije je nekoč zlomil kodo, takrat sem uporabil Ukaz 'git bisect' za zaznavanje slabega ID-ja odobritve čemur slediukaz:git branch - vsebujeza seznam podružnic s to slabo objavo.

Torej, zdaj poznam vse veje, ki imajo še vedno slabo objavo, lahko to spremembo spremenim ali ponastavim.

Iz zgodovine izbriši objavo

Včasih čutim potrebo, da preprosto izbrišem zavezo iz zgodovine in ji ne pustim sledi. Ne priporočam vam, da preizkusite to potezo v skupni veji, ampak samo v lokalni veji.
Sintaksa: git rebase -i
Ukaz :git rebase -i 93859d8
V urejevalniku ponovne zbirke-> zamenjajte 'uredi' s 'padec' za označeni ID prevoda: 69f4813

V nekaterih primerih lahko to ponovno pisanje povzroči konflikte. Konflikte morate razrešiti in nato nadaljevati.

Opozorilo : To je nevaren ukaz, saj s tem ponovno napiše zgodovino in lahko izgubi podatke. Takšna veja se razlikuje od oddaljene kolegice in jo bo treba potisniti z- silaali- prisilna zakupninamožnost.

Potisnil napačno vejo na daljinski upravljalnik

Zdaj je to, kar želim storiti - želim izbrisati a oddaljena veja in tudi nehaj slediti iz moje lokalne podružnice. 'git push'Ukaz, kadar se uporablja z- izbrišimožnost izbriše oddaljeno vejo Torej, tako dobim lokalno kopijo kloniranega projekta -

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


Ko je oddaljena veja izbrisana, morajo drugi v repoju v skupni rabi osvežiti in posodobiti svoje oddaljene reference s- slivamožnost brisanja sklicev na manjkajoče predmete:git fetch --prune -v izvor

V tej objavi sem omenil nekaj pogostih napak ali sprememb, ki vam jih lahko pomaga popraviti git. Vsaka koda je edinstvena in razvita na svoj način, zato obstajajo tudi različni načini približevanja in odpravljanja težave. Vedno se lahko sklicujete na uradnika git dokumentacija razumeti, kako različni ukazi git varujejo vašo izvorno kodo in kako ukaze uporabiti na najboljši možen način.

Zdaj, ko ste razumeli pogoste napake Git, si oglejte to Edureka, zaupanja vredno podjetje za spletno učenje z mrežo več kot 250.000 zadovoljnih učencev, razširjenih po vsem svetu. Tečaj Edureka DevOps Certification Training pomaga učencem, da razumejo, kaj je DevOps, in pridobijo strokovno znanje v različnih procesih in orodjih DevOps, kot so Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack in GIT za avtomatizacijo več korakov v SDLC.

Imate vprašanje za nas? Prosimo, omenite to v oddelku za komentarje te 'pogoste napake Git' in javili se vam bomo