Programmēšana

6 kļūdas, kuras jūs pieļaujat, un kā tās novērst

Liels iemesls, kāpēc izstrādātāji izmanto tādu avotu kontroles sistēmu kā Git, ir izvairīšanās no katastrofām. Ja jūs darāt kaut ko tik vienkāršu, kā kļūdaini izdzēšat failu vai atklājat, ka visas ducim failu veiktās izmaiņas bija nepārdomātas, varat bez grūtībām atsaukt paveikto.

Dažas Git kļūdas ir biedējošākas un grūti atceļamas pat pieredzējušiem Git lietotājiem. Bet ar nelielu rūpību - ja vien jums nav panikas - jūs varat atgriezties no dažām vissliktākajām Git katastrofām, kas zināmas programmētājiem.

Šeit ir saraksts ar vairākiem lielākiem Git boo-boos, kā arī padomi, kā tos atbalstīt un novēršot dažus no tiem. Jo tālāk jūs ejat sarakstā, jo lielākas ir katastrofas.

Kļūda Nr. 1: jūs aizmirsāt pievienot izmaiņas pēdējai saistībai

Šī ir viena no vienkāršākajām Git kļūdām, no kurām atgūties. Pieņemsim, ka jūs kādu darbu veicāt vietējai filiālei un pēc tam sapratāt, ka nenostādījāt vairākus nepieciešamos failus. Vai arī esat aizmirsis pievienot noteiktu informāciju saistību ziņojumā.

Bez bailēm. Pirmkārt, ja jums ir jāveic jaunas izmaiņas, dariet to. Tad ierakstiet git izdarīt - mainīt lai rediģētu saistību ziņojumu. Kad esat pabeidzis, nospiediet Esc un pēc tam ierakstiet : xq lai saglabātu redaktoru un izietu no tā. (Šis pēdējais solis bieži satrauc Git jaunpienācējus, kuri ne vienmēr saprot, ka iebūvētais Git redaktors lielā mērā ir paša dzīvnieks.)

Ja jūs vienkārši maināt failus un jums nav jāgroza saistību ziņojums, varat to izmantot git commit --amend --no-edit lai pievienotu failus un izlaistu ziņojumu rediģēšanas procesu.

Viens no veidiem, kā izvairīties no šāda veida kļūdām, ir kniebiens, kā jūs veicat saistības Git. Ja jūs strādājat pie kaut kā, kur jūs pastāvīgi veicat nelielas saistības, lai izsekotu pakāpeniskas pārskatīšanas, dariet tos izmetamā filiālē. To darot, dokumentējiet galvenās izmaiņas, kuras kaut kur veicat - negaidiet, kamēr saskaraties ar git apņemties komandrinda, lai to visu pierakstītu. Tad, kad esat sasniedzis galveno pagrieziena punktu, izmantojiet git sapludināt - skvošs no sava izmetamā atzara, lai rezultātus saglabātu nepabeigto darbu nodaļā kā vienu, tīru apņemšanos un izmantotu piezīmes, kuras esat veicis saistības ziņojumam.

Kļūda Nr. 2: jūs veicāt izmaiņas (vietējā) meistarā

Vēl viena izplatīta lieta: jūs esat pienācīgi izdarījis virkni izmaiņu ... bet kļūdas pēc savas repo pamatnozarei. Kas tu tiešām gribēju darīt, bija apņemties viņus a jauns filiāle vai uz to dev filiāle, kas jums paredzēta, lai izjauktu izmaiņas.

Viss nav pazudis. Šo kļūdu var novērst trīs komandās:

git filiāle jauna filiāle

git reset HEAD ~ - grūti

git izrakstīšanās jaunā filiāle

Pirmā komanda izveido jauno filiāli, ar kuru vēlamies strādāt. Otrā komanda atiestata galveno filiāli tieši pirms pēdējās saistības, bet atstāj tikko veiktās izmaiņas jauns zars. Visbeidzot, mēs pārejam uz jauno filiāli, kur jūs gaida jūsu izmaiņas.

Ja esat veicis vairākas saistības, izmantojiet git reset HEAD ~ - grūti, kur ir to saistību skaits, kuras vēlaties atgriezties. Vai arī jūs varat izmantot git reset , kur ir mērķa saistības hash ID, ja jums tas ir ērti.

Lai izvairītos no šīs kļūdas, pierodiet izveidot jaunus zarus un pāriet uz tiem, pat ja tos vienkārši izmetīs, kad vien sākat jebkurš sesija ar savu kodu.

Kļūda Nr. 3: jūs izmetāt failu vai direktoriju

Vēl viena izplatīta katastrofa ir kļūdaini izmest faila saturu ... un tikai uzzinot par to, daudzi apņemas filiāli pēc fakts. Par laimi ir vienkāršs labojums.

Pirmkārt, izmantojiet git žurnāls vai jūsu IDE iebūvētais Git rīks, lai atrastu hash ID saistībai, kas iegūta pirms faila modificēšanas. Pēc tam izmantojiet git checkout hash_id - / ceļš / uz / failu pārbaudīt tikai šo failu no attiecīgās saistības. Ņemiet vērā, ka ceļam jābūt samērā ar projekta sakni. Tādējādi faila iepriekšējā versija tiks ievietota jūsu projekta pieturvietā.

Ja jūs vienkārši vēlaties atgriezties n apņemas, jums nav nepieciešams hash ID. Jūs varat vienkārši izdot komandu git checkout HEAD ~ - / ceļš / uz / fails, kur ir to saistību skaits, kuras vēlaties atgriezties.

Ja vēlaties pārbaudīt visu direktorijā failu, pēc tam failu ceļiem izmantojiet Git aizstājējzīmes formātu. Piemēram, ievadīšanagit checkout HEAD ~ 1 - ./src/** jūs aizvedīs atpakaļ par vienu apņemšanos un atgūs visu / src direktoriju no projekta saknes.

Kļūda Nr. 4: jūs nejauši izdzēsāt filiāli

Šis ir scenārijs, no kura mēs visi baidāmies: nejauši izdzēšot visu filiāli no mūsu krātuves. Šis var būt vai nu ļoti viegli atgūties, vai arī nedaudz sarežģītāks, atkarībā no apstākļiem.

Pirmkārt, izmantojiet git reflog atrast filiālē pēdējo apņemšanos. Pēc tam izmantojiet jaukšanas ID, lai izveidotu jaunu filiāli:

git checkout -b atjaunots-filiāle

Ņemiet vērā, ka tas atcels jūsu bekonu tikai tad, ja attiecīgā filiāle jau bija apvienota. Ja piespiedu kārtā izdzēsāt an nepievienots filiāli, jums ir vēl viens veids, kā to atrast, ja vien neesat skrējis git gc uz repozitorija:

git fsck --full --no-reflogs - neaizsniedzams - zaudēts atrasts

Tas atcels sarakstu ar visām saistošajām jaukšanām objektiem, kuri vairs nav sasniedzami, ieskaitot izdzēstos zarus. No saraksta apakšas uz augšu atrodiet ierakstu “nesasniedzama saistība” un mēģiniet atjaunot šo jaukšanas ID jaunā filiālē, lai redzētu, vai tas ir miskastē. Ja tā nav, virzieties uz augšu sarakstā uz nākamo un skatiet, ko varat atgūt.

Parasti pēc noklusējuma nekad neizdzēsiet filiāli no piespiedu kārtas, jo jūs varat viegli nonākt atkritumos pie nepiesaistīta zara, kurā joprojām ir kaut kas vērtīgs. Ja jūs parasti piespiedu kārtā dzēšat zarus, tas nozīmē, ka jūsu darba paradumiem ar zariem jābūt mazāk netīriem.

Git kļūda Nr. 5: jūs aplaupījāt attālo filiāli ar git push

Reiz es strādāju pie GitHub repozitorija vietējās kopijas un kļūdaini nospiedu savu galveno filiāli pie attālās kopijas ar - spēks opcija. Es nonācu pie repo publiskas kopijas, kas tajā laikā nebija izmantojamā stāvoklī. Liels ūps.

Ja esat pieļāvis šādu kļūdu un jūsu repo ir pietiekami nesen sinhronizēts ar attālo repo, varat to novērst, izmantojot savu attālās repo filiāles kopiju. Pārslēdzieties uz filiāli, kas jāveic sinhronizācijai, pieņemot, ka vēl neesat tur, un izdodiet šo komandu:

git reset --hard / @ {1}

Tas atiestatīs jūsu kopiju uz pēdējo sinhronizēto Windows versiju . Manā gadījumā filiāle bija meistars un tālvadības repo bija izcelsmi, tāpēc es varēju izmantot git reset - cieta izcelsme / master @ {1}.

Tad izmantojiet git push -f lai attālo krātuvi atjaunotu iepriekšējā stāvoklī.

Viens no veidiem, kā novērst tā atkārtošanos, ir atteikšanās no spēka piespiešanas. To var konfigurēt attālajā Git repo ar šo komandu:

git config --sistēma saņemt.denyNonFastForwards true

Var pienākt brīdis, kad jums jāveic spēka piespiešana, taču, iespējams, vislabāk ir ieslēgt to, kad jums tas ir nepieciešams, un izslēgt, kad jums tas nav nepieciešams.

Kļūda Nr. 6: jūs nodevāt privātu informāciju publiskai repo

Tā var būt vissliktākā un visgrūtāk risinātā Git problēma. Jūs kļūdaini esat nodevis slepenus datus publiskai repo un vēlaties ķirurģiski izgriezt failus no repo. Jums jāpārliecinās, ka sensitīvos datus nevar atrast, pat atgriežoties pie agrākas saistības, taču tas jums jādaranepieskaroties neko citu.

Tas ir divtik grūti, ja attiecīgā kartotēka ir izdarīta pirms, sešām nedēļām, un tikmēr ir paveikta kravas automašīna ar citu svarīgu darbu. Pirms faila pievienošanas jūs nevarat vienkārši atgriezties; procesa laikā jūs sagraut visu pārējo.

Labās ziņas: Daži bezbailīgi Git mavens izveidoja rīku BFG Repo-Cleaner, kas īpaši paredzēts sliktu datu noņemšanai no Git repo. BFG Repo-Cleaner ļauj ātri veikt repo kopīgus uzdevumus, piemēram, noņemt visus failus, kas atbilst noteiktai aizstājējzīmei vai satur noteiktus tekstus. Jūs pat varat pārsūtīt failā, kurā ir uzskaitīti visi nevēlamie teksti.

BFG Repo-Cleaner būtībā ir automatizācija daudzpakāpju procesam, izmantojot git filtrs-atzars. Ja vēlaties darīt lietas ar roku, GitHub ir detalizēts procesa pārskats. Bet BFG rīks aptver lielāko daļu parasto lietojuma gadījumu, no kuriem daudzi tiek iekļauti rīka komandrindas opcijās. Turklāt process ir garš un sarežģīts, un ir pārāk viegli kaut kur pa ceļam iešauties kājā, ja to darāt ar roku.

Ņemiet vērā, ka, iztīrot datus no vietējās filiāles, kas ir sinhronizējama citur, jūs nevarēsit sinhronizēt, tikai piespiežot piespiedu kārtā attālos zarus. Viss pārņemšanas koks ir jāpārraksta, tāpēc jūs būtībā rakstāt pilnīgi jaunu vēsturi, lai to izveidotu. Jums arī jāpārliecinās, vai visi pārējie pēc jūsu izmaiņām velk jaunu pārrakstītās repo kopiju, jo arī viņu repo vairs nebūs derīga.

$config[zx-auto] not found$config[zx-overlay] not found