Kādas ir izplatītākās Git kļūdas un kā tās novērst?



Veicot koda versijas versijas versijas versijas git versiju sistēmas rīkā, varat atsaukt visbiežāk sastopamās kļūdas un aizsargāt datu integritāti.

Ar uzplaukumu tehnoloģiju, jebkuram IT cilvēkam kļūst neizbēgami vienlaikus strādāt ar vairākiem datiem, un jūsu dati ar laiku pastāvīgi attīstās. Ir arī svarīgi izsekot visām datu izmaiņām un būt gataviem atsaukt vai atsaukt visas nevēlamās izmaiņas, kad tas ir nepieciešams.

Man jāatzīstas, savu datu versija Git ļauj man eksperimentēt vairāk projekta izstrādē. Ja es sajaucu, es zinu, ka git vienmēr ir veids, kā atsaukt un / vai atgriezt šo projekta versiju tādā, kāda tā bija pirms skrūvēšanas. Katrs slānis ir izveidots tā, lai ļautu pārskatīt un modificēt un / vai labot datu izmaiņas pirms datu pārvietošanas nākamajā posmā. Šajā blogā ir aplūkotas šādas kļūdas:





Failu / direktoriju noņemšana no Index

Pievienojot un / vai modificējot failus, jūs bieži mēdzat izmantot noklusējuma komandu ‘git add’, proti, visus failus un direktorijus pievienot indeksam.Daudzas reizes jums šķiet, ka pirms to izdarīšanas ir nepieciešams noņemt noteiktu failu nošķiršanas vai pārveidot tos pēdējo reizi.



Sintakse: git reset


noņemt failus no indeksa - izplatītas kļūdas kļūdās -Edureka

Failu nemainīšana no apgabala Indekss dod jums vēl vienu iespēju pārstrādāt savus datus pirms apņemšanās veikt vietējo repo.



Rediģējiet pēdējo saistīto ziņojumu

fibonacci secība c ++

Komanda: git izdarīt - mainīt
Jūs varat rediģēt jaunāko saistību ziņojumu, neveidojot jaunu. Lai uzskaitītu saistību žurnālus, esmu iestatījis aizstājvārdu “hist”:
Komanda: git config - globālais alias.hist 'log - diezgan = formāts: '% C (dzeltens)% h% Creset% ad | % C (zaļš)% s% Creset% C (sarkans)% d% Creset% C (zils) [% an] '--graph --decorate --date = short'x


Nemainiet saistību ziņojumu, kas jau tiek pārsūtīts uz attālo repozitoriju un tiek kopīgots ar citiem, jo ​​tas padarītu agrāku saistību vēsturi nederīgu un tādējādi varētu ietekmēt jebkuru uz tā balstītu darbu.

Aizmirsāt dažas izmaiņas pēdējā apņemšanās laikā

Pieņemsim, ka esat aizmirsis veikt dažas izmaiņas un jau esat veicis momentuzņēmumu, kā arī nevēlaties vēlreiz apņemties izcelt savu kļūdu.
Komanda: git izdarīt - mainīt


Es esmu uzsvēris, kā nesen izveidotā objekta sha-1 ID ir atjaunots un mainīts. Es izlikos, ka esmu izdarījis vienu apņemšanos, sajaucot abas izmaiņas vienā.

Izmetiet vietējās izmaiņas

Tātad, šeit ir gadījums, kad es pārveidoju failu “README” un iestudēju to. Pēc tam es otro reizi modificēju to pašu failu, bet sapratu, ka nevēlos otrās izmaiņas.

Ļaujiet man neatsaukt visas izmaiņas manuāli, es varu vienkārši izvilkt pakāpenisko faila versiju.
Sintakse:
git checkout -–Lokālas izmaiņas failā
git checkout -–Vietējās izmaiņas visos direktorijā esošajos failos & kautrīgie un kautrīgie

Komanda: git checkout - LASĪT

Tātad, es atmetu pēdējās izmaiņas failā un pieņēmu pakāpenisko faila versiju. Nākamajā saistībā tikai pakāpeniskā faila versija nonāk vietējā repozitorijā.

Nodeva personas datus vietējai repozitorijai

Es vēlos noņemt noteiktus datus no vietējās krātuves, bet saglabāt failus darba direktorijā.
Sintakse:
git reset - jaukta HEAD ~
git reset - sajaukts

Komanda: git reset - jaukta HEAD ~ 1
HEAD ~ 1 norāda apņemšanos tieši pirms nesenās saistības, uz kuru norāda pašreizējā filiāle HEAD.

Pašreizējā momentuzņēmuma faili ir noņemti gan no vietējā repozitorija, gan no pieturvietas. Pievienojiet šādus modeļus globālajā .gitignore failā, lai tos izslēgtu no git.
vim ~ / .gitignore_global
# paroles faili #
* .aplaide
* .atslēga
*. passwd

Tādējādi tiek noņemta saistība, kurai bija paroles failu momentuzņēmums, un jūs saņemat tīru pieturvietu. Mani faili joprojām atrodas manā darba direktorijā, bet vairs nav lokālajā repozitorijā, kā arī netiks virzīti uz attālo repozitoriju.

Uzmanību: Ja jūs tos pazaudējat, jūs tos nevarat atgūt, jo tas par to nezina.

Aizstājiet jaunāko apņemšanos ar jaunu

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

Opcija ‘–soft’ vienkārši noņem vietnei piesaistītos failus no vietējā repozitorija, kamēr tie joprojām ir pakāpeniski ievietoti rādītājā, un pēc pārskatīšanas tos var atkārtoti piešķirt. ir momentuzņēmuma sha-1, kuru vēlaties noņemt no vietējās repo. kur n ir apņemšanos skaits, pirms GALVA apņemas

Komanda :git reset - soft HEAD ~ 1


Modificējiet failus un kārtojiet tos vēlreiz

Komanda: git saistīt -m 'index.html un style.css pievienošana'
Jūsu saistību vēsture tagad izrādās:

Apstrādāja nepareizus datus

Sintakse:
git reset - grūti HEAD ~ n–Iestatiet projekta “n” saistības pirms jaunākā saistītā momentuzņēmuma
git reset - grūti–Iestatiet projektu uz piešķirto saistības momentuzņēmumu

Komanda: git reset - grūti HEAD ~ 1


Jaunākais apņemšanās un bojātie faili tiek noņemti no vietējā repozitorija, pieturvietas, kā arī darba direktorija.

Uzmanību: Tā ir bīstama komanda, jo jūs zaudējat failus darba direktorijā. Nav ieteicams attālināti koplietotajā krātuvē.

Atgriezieties manā vecajā projekta stāvoklī

Jūs varat iepazīties ar vecāku sava projekta stāvokli laika vēsturē. Ja jūs sajaucat jaunāko versiju vai jums ir nepieciešami uzlabojumi vecākā kodā, iespējams, vēlēsities izveidot jaunu filiāli no šī vecā projekta momentuzņēmuma, lai nekavētu pašreizējo darbu. Apskatīsim, kā:
a. Uzskaitiet projekta vēsturi un izlemiet par vecāku saistību ID, komandu:iet hist
b. Izveidojiet citu filiāli no saistības ID:git checkout -b vecās valsts e7aa9a5
c. Turpiniet darbu pie koda un vēlāk apvienojiet / pārinstalējiet ar filiāli ‘master’.

Atgūt izdzēsto vietējo filiāli

Zaudēto darbu ir iespējams atjaunot uz atsauces zara. Sakiet, es izdzēsu filiāli ‘old_code’, nesaplūstot ar galveno filiāli, un zaudēju darbu. Un nē, es arī nepiespiedu zaru uz attālo krātuvi, kā tad? Labi izsekojiet un saglabājiet žurnāla ierakstu par visām izmaiņām, kas veiktas katrā atsaucē, redzēsim manu:iet reflog

Tātad, HEAD @ {2} ir rādītājs, kad es pārcēlos uz filiāli ‘old_code’, atgūsim to:

Sintakse:git izrakstīšanās -b
Komanda:git checkout -b old_code HEAD @ {2}

Izveidošanas laikā jums tagad jābūt filiālē “old_code” ar savu jaunāko darbu. Turklāt “reflog” rādītājs vietnē HEAD @ {1} bija nesen veiktā filiāles “old_code” saistītā saistība. Lai atjaunotu šo unikālo apņemties, vienkārši izpildiet komandu kā:git reset - grūti HEAD @ {1}.Tas arī atjauno modificētos failus darba direktorijā.

Ja vēlaties detalizēti uzzināt, kā šī komanda darbojas un kā jūs varat pārvaldīt ‘reflog’ ierakstus, jūs varat arī izlasīt manu iepriekšējo ziņojumuatgūt izdzēsto filiāli no git reflog.

Atsaukt izmaiņas, kas veiktas saistībās

aizietatgrieztiestiek izmantots, lai ierakstītu dažas jaunas saistības, lai mainītu dažu iepriekšējo saistību sekas.
Sintakse: git atgriezties
No maniem saistību žurnāliem es vēlētos mainīt izmaiņas, kas veiktas iezīmētajā saistību ID:

Komanda: git revert 827bc0d

Labāk nav atiestatīt koplietotās saistības, bet tā vietā tās ir jāatjauno, lai saglabātu vēsturi, lai visiem būtu vieglāk izsekot vēstures žurnālus, lai uzzinātu, kas ir atgriezts. un kāpēc?

Varat izmantot to pašu loģiku, kā norādīt saistības, kas attiecas uz HEAD rādītāju, tā vietā, lai norādītu saistību izpildes ID, piemēram, HEAD ~ 3 vai HEAD ~ 4 utt.

Deva nepareizu nosaukumu manai filiālei

Jūs varat pārdēvēt vietējās filiāles nosaukumu. Daudzas reizes tas notiek tā, ka, iespējams, vēlēsities pārdēvēt savu filiāli, pamatojoties uz problēmu, ar kuru strādājat, nepārdzīvojot visu darbu migrēšanu no vienas vietas uz otru. Piemēram, jūs varat būt vienā filiālē vai citā filiālē un joprojām varat pārdēvēt vēlamo filiāli, kā parādīts zemāk:
Sintakse: git filiāle -m
Komanda: git filiāle -m old_code old_ # 4920

Kā jūs domājat, vai git seko līdzi šim pārdēvēšanai? Jā, tas attiecas uz jūsu “reflog” ierakstiem, šeit ir mans:

Filiāles pārdēvēšana neietekmēs tās attālinātās izsekošanas filiāli. Tālvadības sadaļā mēs redzēsim, kā nomainīt filiāli attālajā krātuvē

Pirms pārvietojat uz tālvadības pulti, sakārtojiet vēstures žurnālus

Kā es vēlētos, lai es būtu izdarījis noteiktas saistības agrāk nekā citas un nebūtu izdarījis dažas vispār. Interaktīvi pārkārtojiet un rediģējiet vecās saistības, lai efektīvi labotu vai uzlabotu kodu
Sintakse: git rebase -i
Komanda: git rebase -i fb0a90e- sāciet pārvērtēt saistības, kas tika veiktas pēc saistības-id fb0a90e

Atkārtoti apmeklējiet git rebase dokumentācija, lai saprastu, kā “–interaktīva vai -i” atkārtota bāze atšķiras no parastas atsākšanas.

Veiktas nesaistītas izmaiņas vienā saistībā

Šajā gadījumā jums ir jāsadala veca apglabāta saistība vairākās loģiskās izdarībās.
Sintakse: git rebase -i
Komanda: git rebase -i fb0a90e
Rebase redaktorā jums jāizvēlas e7aa9a5 saistības ID un jāmaina tas uz ‘rediģēt’, nevis ‘izvēlēties’.

nesaistītas izmaiņas - izplatītas git kļūdas -Edureka

Tagad jūs izmantojat projekta versiju comm id-e7aa9a5. Vispirms atiestatiet saistību vēsturi un iestudēšanas apgabalu uz iepriekšējo Command-Command:git reset HEAD ~ 1
Otrkārt, rediģējiet + posms + piešķiriet failus atsevišķi
Komandas:
git add code && git saistīt -m 'Sākotnējo kodu pievienošana'
git add newcode un&it git -m 'Jauna koda pievienošana'

Treškārt, turpiniet atkārtoto bāzi un beidziet.

Komanda :git rebase - turpiniet
Ceturtkārt, apskatiet vēsturi ar papildu saistībām.

Komanda: iet hist

saistību sadalīšana vairākos, izmantojot rebase - bieži sastopamas kļūdas - Edureka

Mainīt autora e-pasta adresi visās saistībās visās filiālēs

Es jau ilgu laiku versiju un izpildīju savus projekta failus gitā, taču līdz šim man nekad nešķita, ka mans e-pasta ID ir apdraudēts manos saistību vēstures žurnālos, kas pat tiek publicēti attālās krātuvēs. Nu, tas var notikt ikvienam, kad sākotnēji iestatījāt konfigurācijas failā “.gitconfig”. pārrakstīt vides mainīgie, kurus mēs piedāvājam, izveidojot saistības objektu.

Vispirms es saņemu sarakstu ar e-pasta ID izlemt tos, kurus vēlos mainīt:
Komanda: git log - viss - diezgan = formāts: '% an% d'–Šis izdrukā autora vārdu (refname / filiāles nosaukums)

Otrkārt, es izskrienu cauri katru apņemšanos katrā zarā un pārrakstiet saistības objektu ar jauno e-pasta ID
Komanda:
git filter-branch - env-filter '
ja ['$ GIT_AUTHOR_NAME' = 'divya']
pēc tam
GIT_AUTHOR_EMAIL = 'divya@github.com'
būt
'- - visi

programmu, lai apgrieztu skaitli java

Zaudētie un atrastie faili

Pieņemsim, ka esat pazaudējis noteiktu failu un neatceraties tā nosaukumu, bet varētu atcerēties dažus vārdus failā. Šajā gadījumā jūs varat rīkoties šādi:
1. darbība: Uzskaitiet visas saistības, kas jebkad saturēja faila momentuzņēmumu, ar meklēto modeli
Komanda :git rev-list - visi | xargs git grep -i 'laika zīmogs'



2. solis : Izveidojiet jaunu filiāli “pazaudēts-atrasts” no šī izceltā saistības-id
Sintakse: git checkout -b zaudēts atrasts d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

Aizmirsu, kurā filiālē ir mans saistības ID

Reizēm, pēc tam, kad esat atklājis kļūdainu saistību ID, jūs varētu arī vēlēties uzzināt visas filiāles, kurām ir šī saistība, lai jūs varētu tos visus salabot. Katras filiāles vēstures pārbaude nav daudz praktiska lielā daudznozaru projektā.

Slikta apņemšanās, kas tika veikta manā navigācijas ēkas lietojumprogrammā, reiz pārkāpa kodu, tieši tad es to izmantoju ‘Git bisect’ komanda, lai noteiktu sliktu saistības ID sekokomanda:git filiāle - saturuzskaitīt filiāles ar šo slikto apņemšanos.

Tātad, tagad es zinu visas filiāles, kurām joprojām ir slikta saistība, es varētu vai nu atjaunot, vai atiestatīt šo izmaiņu kopu.

Dzēst saistības no vēstures

Dažreiz es jūtu nepieciešamību vienkārši iznīcināt apņemšanos no vēstures un neatstāt tās pēdas. Es neieteiktu jums izmēģināt šo triku kopīgajā filiālē, bet tikai vietējā filiālē.
Sintakse: git rebase -i
Komanda :git rebase -i 93859d8
Rebase redaktorā-> aizstājiet ‘edit’ ar ‘drop’ iezīmētajam saistības ID: 69f4813

Dažos gadījumos šī pārrakstīšana var izraisīt konfliktus. Jums ir jāatrisina konflikti, pēc tam rīkojieties tālāk.

Brīdinājums : Šī ir bīstama komanda, jo tā pārraksta vēsturi un var zaudēt datus. Šāds zars atšķiras no tā attālinātā kolēģa, un tas būs jāpiespiež ar- spēksvai- spēks ar nomuopcija.

Nospieda nepareizu zaru uz tālvadības pulti

Lūk, ko es vēlos darīt - es vēlos izdzēst attālā filiāle un arī pārtrauciet to izsekot no manas vietējās filiāles. ”git push‘Komanda, ja to lieto kopā ar--dzēstopcija izdzēš attālo filiāli. Tādējādi es iegūstu klonētā projekta vietējo kopiju -

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


Kad attālā filiāle ir izdzēsta, citiem koplietotajā repo ir jāatsvaidzina un jāatjaunina viņu attālās atsauces ar--grieztiespēja izdzēst trūkstošās objekta atsauces:git fetch - plūmju -v izcelsme

Šajā ziņojumā es esmu pieminējis dažas izplatītākās kļūdas vai izmaiņas, kuras git var palīdzēt novērst. Katrs kods ir unikāls un savā veidā izstrādāts, tāpēc ir arī dažādi veidi, kā pieiet un novērst problēmu. Jūs vienmēr varat atsaukties uz ierēdni git dokumentācija lai saprastu, kā dažādas git komandas aizsargā jūsu pirmkodu un kā komandas izmantot pēc iespējas labāk.

Tagad, kad esat sapratis parastās Git kļūdas, pārbaudiet to Autors: Edureka, uzticams tiešsaistes mācību uzņēmums ar vairāk nekā 250 000 apmierinātu izglītojamo tīklu visā pasaulē. Edureka DevOps sertifikācijas apmācības kurss palīdz izglītojamajiem saprast, kas ir DevOps, un iegūt zināšanas dažādos DevOps procesos un rīkos, piemēram, Leļļu, Jenkins, Nagios, Ansible, Chef, Saltstack un GIT, lai automatizētu vairākus SDLC soļus.

Vai mums ir jautājums? Lūdzu, pieminējiet to šīs “izplatītās Git kļūdas” komentāru sadaļā, un mēs ar jums sazināsimies