Kokios yra dažniausios „Git“ klaidos ir kaip jas ištaisyti?



Atšaukite dažniausiai pasitaikančias klaidas versijuodami kodą „git“ versijų sistemos įrankyje ir apsaugokite savo duomenų vientisumą.

Su bumu technologijos, bet kuriam IT asmeniui tampa neišvengiama vienu metu dirbti su keliais duomenimis, o jūsų duomenys su laiku nuolat keičiasi. Taip pat būtina stebėti kiekvieną duomenų pasikeitimą ir būti pasirengusiai atšaukti ar atšaukti nepageidaujamus pakeitimus, kai to reikia.

Turiu prisipažinti, kad versijos duomenys sistemoje „Git“ leidžia man labiau eksperimentuoti kuriant projektą. Jei sujaukiu, žinau, kad „git“ visada turi būdą anuliuoti ir (arba) grąžinti tą mano projekto versiją tokią, kokia ji buvo prieš man sukant. Kiekvienas sluoksnis yra sukurtas tam, kad būtų galima peržiūrėti ir modifikuoti bei (arba) pataisyti duomenų pakeitimus prieš perkeliant duomenis kitame etape. Taigi šiame tinklaraštyje aprašytos klaidos:





Panaikinti failus / katalogus iš „Index“

Pridėdami ir (arba) modifikuodami failus, dažnai naudojate numatytąją „git add“ komandos elgseną, ty pridėti visus failus ir katalogus į rodyklę.Daug kartų manote, kad prieš atliekant tam tikrus failus reikia atkurti arba pakeisti juos paskutinį kartą.



Sintaksė: git atstatyti


pašalinti failus iš rodyklės - dažniausiai pasitaikančios klaidos -Edureka

Neišstumdami failų iš indekso srities, suteikiate dar vieną galimybę iš naujo dirbti su savo duomenimis prieš pasiryždami vietos repo.



Redaguokite paskutinį perduotą pranešimą

Komanda: git įsipareigoti - pakeisti
Galite redaguoti naujausią įsipareigojimo pranešimą nesukurdami naujo. Norėdami išvardyti įsipareigojimų žurnalus, nustatiau slapyvardį „hist“:
Komanda: „git config - global alias.hist“log - gana = formatas: '% C (geltona)% h% Creset% ad | % C (žalia)% s% Creset% C (raudona)% d% Creset% C (mėlyna) [% an] '--graph --decorate --date = short'x


Nekeiskite įsipareigojimo pranešimo, kuris jau yra persiųstas į nuotolinę saugyklą ir bendrinamas su kitais, nes tai padarytų ankstesnę įsipareigojimų istoriją negaliojančią, taigi gali būti paveiktas bet koks tuo pagrįstas darbas.

Pamiršau kai kuriuos pakeitimus paskutiniame įsipareigojime

Tarkime, kad pamiršote atlikti kai kuriuos pakeitimus ir jau atlikote momentinę nuotrauką, taip pat nenorite dar kartą įsipareigoti pabrėžti savo klaidą.
Komanda: git įsipareigoti - pakeisti


Pabrėžiau, kaip atkurtas ir pakeistas neseniai įvykdyto objekto sha-1 ID. Apsimesdavau, kad padariau vieną įsipareigojimą, sujungdamas abu pakeitimus į vieną.

Atmeskite vietinius pakeitimus

Taigi, čia yra atvejis, kai pakeičiau „README“ failą ir jį inscenizavau. Tada antrą kartą pakeičiau tą patį failą, bet supratau, kad nenoriu antrojo pakeitimo.

Leiskite man neatšaukti viso pakeitimo rankiniu būdu, aš tiesiog galiu parengti etapinę failo versiją.
Sintaksė:
git kasa -- vietiniai failo pakeitimai
git kasa -Vietiniai visų kataloge esančių failų pokyčiai & drovus ir drovus

Komanda: git checkout - SKAITYTI

Taigi, aš atmetiau paskutinius failo pakeitimus ir sutikau su etapiniu failo variantu. Kitame įsipareigojime tiesiog pakopinė failo versija pateks į vietinę saugyklą.

Persiuntė asmens duomenis į vietinę saugyklą

Noriu pašalinti tam tikrus duomenis iš vietinės saugyklos, bet failus laikyti darbo kataloge.
Sintaksė:
„git reset“ - sumaišyta GALVA ~
„git reset“ - sumaišytas

Komanda: „git reset“ - sumaišyta GALVA ~ 1
HEAD ~ 1 rodo įsipareigojimą prieš pat paskutinį įsipareigojimą, kurį nurodo dabartinis šakos HEAD.

Dabartinės momentinės nuotraukos failai pašalinti iš vietinės saugyklos ir sustojimo srities. Įtraukite šiuos modelius į visuotinį .gitignore failą, kad pašalintumėte juos iš „git“.
vim ~ / .gitignore_global
# slaptažodžio failai #
*. praeiti
*.Raktas
*. passwd

Tokiu būdu įsipareigojimas, turėjęs slaptažodžių failų momentinę nuotrauką, pašalinamas ir gausite švarią sustojimo zoną. Mano failai vis dar yra mano darbo kataloge, bet jų nebėra vietinėje saugykloje, jie taip pat nebus perkelti į nuotolinę saugyklą.

Atsargiai: Jei jų prarasite, „git“ negalės jų susigrąžinti, nes apie tai nežino.

Pakeiskite naujausią įsipareigojimą nauju įsipareigojimu

Sintaksė: „git“ atstatymas - minkštas [/ HEAD ~ n>]

Pasirinkimas „–soft“ tiesiog pašalina priskirtus failus iš vietinės saugyklos, kol jie vis dar yra išdėstyti rodyklėje, ir po peržiūros galite juos iš naujo priskirti. yra momentinės nuotraukos sha-1, kurią norite pašalinti iš vietinės repo. kur n yra įsipareigojimų skaičius, prieš įvykdant GALVĄ

Komanda :„git reset“ - minkšta GALVA ~ 1


Pakeiskite failus ir vėl juos suplanuokite

Komanda: git įsipareigoti -m „Įtraukti index.html ir style.css“
Dabar pasirodo, kad jūsų įsipareigojimų istorija yra:

Pateikė neteisingus duomenis

Sintaksė:
git reset - hard HEAD ~ n–Iš naujo nustatykite „n“ įsipareigojimą prieš naujausią atliktą momentinį vaizdą
„git reset“ - sunku–Iš naujo nustatykite projektą, kad būtų pateiktas įsipareigojimo ID momentinis vaizdas

Komanda: „git“ atstatymas - kieta GALVA ~ 1


Paskutinis įvykdymas ir sugadinti failai pašalinami iš vietinės saugyklos, sustojimo srities ir darbo katalogo.

Atsargiai: Tai pavojinga komanda, nes jūs prarandate failus darbo kataloge. Nerekomenduojama nuotoliniu būdu bendrinamoje saugykloje.

Grįžkite į mano seną projekto būseną

Galite apžvelgti senesnę savo projekto būseną laiko istorijoje. Jei sugadinsite naujausią versiją arba jums reikės patobulinimų senesniame kode, galbūt norėsite iš šio seno projekto momentinio vaizdo sukurti kitą filialą, kad netrukdytumėte savo dabartiniam darbui. Pažiūrėkime, kaip:
a. Išvardinkite projekto istoriją ir nuspręskite senesnį įpareigojimo ID, komandą:eik hist
b. Sukurkite kitą filialą iš įsipareigojimo ID:git kasa -b senosios valstijos e7aa9a5
c. Tęskite darbą su kodu ir vėliau sujunkite / iš naujo su „master“ šaka.

Atkurkite ištrintą vietinį skyrių

Prarastą darbą atsinaujinti galima atskaitos šakoje. Tarkim, aš pašalinau šaką „old_code“ nesusijungęs su pagrindine šaka ir pametiau darbą. Ir ne, aš irgi neatstumiau šakos į nuotolinę saugyklą, o kas tada? Gerai git takelius ir saugokite visų pakeitimų, atliktų kiekvienoje nuorodoje, žurnale, pažiūrėkime mano:eiti reflog

Taigi, „HEAD @ {2}“ yra rodyklė, kai perėjau į „old_code“ filialą, atkurkime tai:

Sintaksė:git kasa -b
Komanda:git checkout -b old_code HEAD @ {2}

Sukūrimo metu jūs turite būti skyriuje „old_code“ su savo naujausiu darbu. Be to, „reflog“ rodyklė HEAD @ {1} buvo naujausias įsipareigojimas „old_code“ filiale. Norėdami atkurti šį unikalų įsipareigokite tiesiog paleiskite komandą kaip:git reset - hard HEAD @ {1}.Taip pat atkuriami modifikuoti failai darbo kataloge.

Jei norite išsamiai sužinoti, kaip ši komanda veikia ir kaip galite valdyti „reflog“ įrašus, taip pat galite perskaityti mano ankstesnį įrašąatkurti ištrintą šaką iš „git reflog“.

Anuliuoti įsipareigojime atliktus pakeitimus

eikgrįžtiyra naudojamas įrašyti kai kuriuos naujus įsipareigojimus, kad būtų panaikintas kai kurių ankstesnių įsipareigojimų poveikis.
Sintaksė: git grįžti
Iš savo įsipareigojimų žurnalų norėčiau pakeisti pažymėtą įsipareigojimo ID atliktą pakeitimą:

Komanda: „git revert“ 827bc0d

Geriau, kad nenustatytumėte „hardh“ bendrų įsipareigojimų, o „git grąžinkite“ juos, kad išsaugotumėte istoriją, kad visiems būtų lengviau sekti istorijos žurnalus, kad sužinotumėte, kas buvo grąžintas ir kodėl?

Užuot pateikę įsipareigojimo ID, galite naudoti tą pačią logiką, kai nurodote su HEAD žymekliu susijusius įsipareigojimus, kaip antai HEAD ~ 3 arba HEAD ~ 4 ir pan.

Davė neteisingą vardą mano filialui

Galite pervadinti vietinio filialo pavadinimą. Taip atsitinka daug kartų, kad galbūt norėsite pervadinti savo filialą, atsižvelgdami į problemą, su kuria dirbate, nepatirdami skausmo visą savo darbą perkeldami iš vienos vietos į kitą. Pavyzdžiui, galite būti toje pačioje arba kitoje šakoje ir vis tiek sugebėti pervardyti norimą šaką, kaip parodyta žemiau:
Sintaksė: git filialas -m
Komanda: git filialas -m senas_kodas senas_ # 4920

Kaip jums gali kilti klausimas, ar „git“ seka šio pervadinimo kelią? Taip, tai nurodo jūsų „reflog“ įrašus, čia yra mano:

Filialo pervadinimas neturės įtakos jo nuotolinio stebėjimo šakai. Nuotoliniame skyriuje pamatysime, kaip pakeisti nuotolinės saugyklos filialą

„JavaScript“ įspėjimo prisijungimas norint atsisiųsti

Iš naujo sutvarkykite istorijos žurnalus prieš stumdami į nuotolinio valdymo pultą

Kaip norėčiau, kad būčiau padaręs tam tikrus įsipareigojimus anksčiau nei kiti ir visai nedariau kai kurių. Interaktyviai pertvarkykite ir redaguokite senus įsipareigojimus, kad kodas būtų pataisytas arba patobulintas
Sintaksė: git rebase -i
Komanda: git rebase -i fb0a90e–Pradėkite pakartotinai vertinti įsipareigojimus, kurie buvo padaryti po įsipareigojimo ID fb0a90e

Dar kartą apsilankykite git rebase dokumentus, kad suprastumėte, kuo „–interaktyvi arba -i“ pakartotinė bazė skiriasi nuo įprastos.

Padarė nesusijusius pakeitimus į vieną įsipareigojimą

Tokiu atveju seną palaidotą įsipareigojimą reikia padalyti į kelis loginius įsipareigojimus.
Sintaksė: git rebase -i
Komanda: git rebase -i fb0a90e
Rebase redaktoriuje turite pasirinkti e7aa9a5 įsipareigojimo ID ir pakeisti jį į 'redaguoti', o ne 'pasirinkti'.

nesusiję pokyčiai - dažniausiai pasitaikančios klaidos -Edureka

Dabar būsite įtraukta į „version id“ „id-e7aa9a5“ projekto versiją. Pirmiausia iš naujo nustatykite įsipareigojimų istoriją ir sustojimo sritį į ankstesnę „Command-Command“ komandą:git atstatyti HEAD ~ 1
Antra, redaguokite + etapas + priskirkite failus atskirai
Komandos:
„git“ pridėkite kodą ir & git įsipareigokite -m „Pridedami pradiniai kodai“
„git“ pridėkite naują kodą ir & git įsipareigokite -m „Naujo kodo pridėjimas“

Trečia, tęskite atkūrimą ir pabaigą.

Komanda :git rebase - tęskite
Ketvirta, peržiūrėkite istoriją su papildomais įsipareigojimais.

Komanda: eik hist

įsipareigojimų padalijimas į kelis, naudojant rebase - dažniausiai pasitaikančios klaidos - „Edureka“

Keisti autoriaus el. Pašto adresą visuose įsipareigojimuose visuose filialuose

Aš jau seniai versiju ir vykdau savo projekto failus „git“ formatu, tačiau iki šiol man niekada nepadarė minties, kad mano el. Pašto adresas buvo pažeistas mano įsipareigojimų istorijos žurnaluose, kurie netgi skelbiami nuotolinėse saugyklose. Na, taip gali atsitikti bet kam, kai iš pradžių nustatėte konfigūracijas faile „.gitconfig“. Mano lengvata gali perrašyti aplinkos kintamuosius, kuriuos pateikiame kurdami įsipareigojimo objektą.

Pirmiausia gaunu sąrašą pašto ID nuspręsti tuos, kuriuos noriu pakeisti:
Komanda: „git“ žurnalas - visi - gana = formatas: „% an% d“–Šis spausdina autoriaus vardą (refname / branch-name)

Antra, aš perbėgu kiekvienas įsipareigojimas kiekvienoje šakoje ir iš naujo parašykite įsipareigojimo objektą su nauju el. pašto ID
Komanda:
„git filter-branch“ - env-filter “
jei ['$ GIT_AUTHOR_NAME' = 'divya']
tada
GIT_AUTHOR_EMAIL = 'divya@github.com'
būti
'- - visi

Pamesti ir rasti failai

Tarkime, kad pametėte tam tikrą failą ir neprisimenate jo pavadinimo, bet galėtumėte prisiminti tam tikrus failo žodžius. Tokiu atveju galite atlikti šiuos veiksmus:
1 žingsnis: Pateikite visus atliktus veiksmus, kuriuose kada nors buvo failo momentinė nuotrauka, su ieškomu šablonu
Komanda :git rev-list - visi | xargs git grep -i 'laiko žymė'



2 žingsnis : Sukurkite naują „pamestą-rastą“ šaką iš šio paryškinto įsipareigojimo ID
Sintaksė: git checkout -b pamestas rastas d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

Pamiršau, kuriame filiale yra mano įsipareigojimo ID

Kartais, aptikę klaidų įsipareigojimų ID, taip pat galbūt norėsite sužinoti visas atšakas, kuriose yra šis įsipareigojimas, kad galėtumėte jas visas ištaisyti. Kiekvieno filialo istorijos tikrinimas nėra labai praktiškas vykdant didelį kelių šakų projektą.

Mano navigacijos pastato programoje padarytas blogas įsipareigojimas kartą sugadino kodą, tada ir panaudojau „Git bisect“ komanda aptikti blogą įvykdymo ID po jokomanda:git filialas - yraišvardyti šakas su tuo blogu įsipareigojimu.

Taigi, dabar aš žinau visas šakas, kurios vis dar blogai įsipareigojo, galėčiau grąžinti arba iš naujo nustatyti šį pakeitimų rinkinį.

Ištrinti įsipareigojimą iš istorijos

Kartais jaučiu poreikį tiesiog išnaikinti įsipareigojimą iš istorijos ir nepalikti jo pėdsakų. Nerekomenduočiau išbandyti šio triuko bendrame filiale, o tik vietiniame filiale.
Sintaksė: git rebase -i
Komanda :git rebase -i 93859d8
Perkraukimo redaktoriuje -> pakeiskite „redaguoti“ į „drop“ pažymėtam įsipareigojimo ID: 69f4813

Kai kuriais atvejais šis perrašymas gali sukelti konfliktus. Turite išspręsti konfliktus, tada tęskite toliau.

Įspėjimas : Tai pavojinga komanda, nes ji perrašo istoriją ir gali prarasti duomenis. Toks filialas skiriasi nuo jo nuotolinio atitikmens ir jį reikės stumti kartu su- jėgaarba- jėga su nuomavariantą.

Nustūmė neteisingą šaką į nuotolinio valdymo pultą

Štai ką noriu padaryti - noriu ištrinti a nutolęs filialas ir taip pat nustokite jį sekti iš mano vietinio skyriaus. “git stumti‘Komanda, kai naudojama su--Ištrintiparinktis ištrina nuotolinį filialą. Taigi, taip gaunu vietinę klonuoto projekto kopiją -

„git“ klonas https://github.com/greets/myProj.git
CD „myProj“


Kai nuotolinis filialas bus ištrintas, kiti bendro turinio repo nariai turi atnaujinti ir atnaujinti nuotolines nuorodas naudodami- slyvagalimybė ištrinti trūkstamas objekto nuorodas:git fetch - slyva -v kilmė

Šiame įraše paminėjau keletą dažniausiai pasitaikančių klaidų ar pakeitimų, kuriuos „git“ gali padėti išspręsti. Kiekvienas kodas yra unikalus ir sukurtas savaip, todėl taip pat yra įvairių būdų, kaip prieiti prie problemos ir ją išspręsti. Visada galėjai kreiptis į pareigūną git dokumentacija suprasti, kaip įvairios „git“ komandos saugo jūsų kodą ir kaip kuo geriau panaudoti komandas.

Dabar, kai supratote įprastas „Git“ klaidas, patikrinkite tai sukūrė „Edureka“ - patikima internetinė mokymosi įmonė, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą. „Edureka DevOps“ sertifikavimo mokymo kursas padeda besimokantiesiems suprasti, kas yra „DevOps“, ir įgyti patirties įvairiuose „DevOps“ procesuose ir įrankiuose, tokiuose kaip „Lėlė“, „Jenkins“, „Nagios“, „Ansible“, „Chef“, „Saltstack“ ir „GIT“, norint automatizuoti kelis SDLC veiksmus.

Turite mums klausimą? Prašau paminėti tai „bendros„ Git “klaidos“ komentarų skyriuje ir mes su jumis susisieksime