„Git Reflog“ - kaip atkurti ištrintą šaką, kuri nebuvo sujungta



Šis straipsnis apie „Git Reflog“ yra išsamus vadovas, kaip atkurti ištrintą šakotą „Git“ naudojant „Git Reflog“.

„Ar jūs kada nors pametėte filialą, kurio šaltinio kodas dar nebuvo sujungtas„ paleidimo “ar„ pagrindiniame “filiale? Ką daryti, jei norite atkurti ištrintą šaką, nors jos darbas jau buvo sujungtas su pagrindine šaka? “ . Na, vienintelis tokių scenarijų sprendimas yra Eiti perrašyti .

Per šį straipsnį „Git Reflog“ aš jums padėsiusuprask scenarijus, kai gali būti prarastas darbas filiale, ir kaip atgauti filialą.Be to, šiame straipsnyje bus išryškintas požiūris, kurio galite imtis, kad išvengtumėte netyčinio šakos praradimo dirbant dideliame projekte.





    1. Kas yra „Git Reflog“?
    2. Kaip ir kada filialas ištrinamas?
    3. Atkurkite ištrintą šaką
    4. Koks darbas atkuriamas, kai atkuriama ištrinta šaka?
    5. „Git Reflog“ pakomandos

Taigi, pradėkime nuo šio straipsnio.



Apsvarstykite scenarijų, maintaineris turi sujungti daugybę skirtingų filialų funkcijų šakų ir galiausiai jas ištrinti, tačiau filialas netyčia ištrinamas prieš sujungiant kūrinį?

Na, prieš pereidamas prie šio straipsnio, leiskite man pasakyti, kad „Git“ tai neįmanoma. yra saugūs ir veikia kaip patikros postas neleistų to padaryti. Taigi, čia yra Git Reflog paveikslėlis.

Kas yra „Git Reflog“?

‘Reflog’ komanda palaiko a trasa kiekvienas atskirose nuorodose padarytas pakeitimas (šakos ar žymos) saugykloje ir saugo šakų ir žymų, sukurtų vietoje arba patikrintų, žurnalo istoriją. Nuorodų žurnalus, pvz., Įvykio momentinę kopiją, kai filialas buvo sukurtas ar klonuotas, patikrintas, pervardytas ar bet kokie filiale atlikti įsipareigojimai, tvarko ir išvardyti „reflog“ komanda.



Pastaba: Filialą iš jūsų darbo katalogo bus galima atkurti tik tuo atveju, jei filialas kada nors egzistavo jūsų vietinėje saugykloje, t. filialas buvo sukurtas vietoje arba išsiregistruotas iš nuotolinės saugyklos jūsų vietinėje saugykloje, kad „Git“ saugotų nuorodų istorijos žurnalus.

Ši komanda turi būti vykdoma saugykloje, kurioje buvo pamestas šaka. Jei manote, kadnuotolinio saugyklos situaciją, tada jūs turite vykdyti reflog komandą kūrėjo mašinoje, kuri turėjo filialą.

komanda: eiti reflog

Dabar, kai žinote, kas yra „Git Reflog“, leiskite mumspabandykite ištrinti sujungtą ir nesujungtą šaką ir pažiūrėkite, kaip „Git“ tai tvarko?

1 žingsnis: išvardykite šakas, sujungtas į pagrindinį

Pirmiausia patikrinkite meistras Filialas, jei esate kitame filiale, naudodamas komandą:

$ git kasos meistras

Rezultatas

„Git Checkout Master“ - „Git Reflog“ - „Edureka“

Dabar, norėdami gauti sujungtų šakų sąrašą, paminėkite šią komandą:

$ git filialas - sujungtas

Išvestis:

1.1 žingsnis: Tada ištrinkite sujungtą šaką:

$ git filialas - d numeris # 902

Išvestis:

Filialas „issue # 902“ buvo sėkmingai ištrintas, nes jis jau sujungtas su „master“ filialu.

2 žingsnis: Dabar išveskime šakas, kurios nėra sujungtos į pagrindinį.

$ git filialas - nėra sujungtas

Rezultatas

2.2 žingsnis: Galiausiai ištrinkime nesujungtą šaką naudodami šią komandą:

$ git filialas -d prepod

Jei bandote ištrinti vieną iš šakų, kai nebaigtas darbas, pasakykite „preprod“ filialą, „git“ parodys įspėjamąjį pranešimą.

Rezultatas

Dabar, kol aš jums pasakysiu, kaip galite atkurti šio straipsnio duomenis „Git Reflog“, leiskite man pasakyti, kas tiksliai atsitinka, kai filialas ištrinamas ir kokiomis aplinkybėmis filialas gali būti atkurtas.

Kaip ir kada filialas ištrinamas?

Kaip žinome, kad Git yra a Paskirstyta versijų valdymo sistema (DVCS), kiekviena mašina su klonu ar saugyklos kopija veikia abu mazgas ir a stebulė . Taireiškia, kad kiekviena mašina turės savo viso saugyklos kodo ir istorijos kopiją.Nereikia nė sakyti, kad būsite dalijimasis savo darbą su kitais ir leidyba tas pats.

Taigi tokiais atvejais gali būti 3 atvejai, kai filialas ištrinamas realiame scenarijuje, kai daugelis prisidėjusiųjų dirba prie didelio projekto. Tai gali būti šie atvejai:

pl sql pamoka su pavyzdžiais

1 atvejis - kūrėjas gali arba sujungti, arba ištrinti šaką

Apsvarstykite scenarijų, kai kūrėjas sujungia funkcijų šaką į pagrindinę šaką vietoje, o tada pašalina funkcijų šaką naudodamas „ gito šaka ’Komanda su„ - d “Vėliava, kaip matyti ankstesnėse ekrano kopijose.

Komanda: „Git branch -d branch_name“

Taip pat gali atsitikti taip, kad kūrėjas nusprendžia išmesti šakos pakeitimus ir nusprendžia ištrinti šaką nesujungdamas jos su jokiu kitu filialu naudodamas šią komandą:

Komanda: „Git filialas -D šakos_pavadinimas“

Naudodamas pirmiau pateiktą komandą, kūrėjas yrapriverstinai ištrinti šaką, viršijančią įspėjimą

$ git filialas -D preprod

Rezultatas

Pastaba : „Preprod“ filialas nebebus rodomas, kai paleisite komandą „git branch“. Taigi, ymūsų darbas, išsaugotas šioje šakoje, bus prarastas.

2 atvejis - kūrėjas pašalina filialą bendroje saugykloje

kas yra „sqlite“ naršyklė

Apsvarstykite scenarijų, kai kūrėjas, turintis skaitymo / rašymo prieigą, bando priversti ištrinti nuotolinį filialąnaudojant komandą „git push“ su vėliava „–delete“.

$ git push origin - ištrinti greitąsias pataisas

Rezultatas

Be to, taip pat gali būti atvejis, kai neįgaliotas ar kenksmingas vartotojas priverčia ištrinti nuotolinį filialą.Tokiu atveju prižiūrėtojas galės atkurti ištrintą „greitųjų pataisų“ šaką tik tuo atveju, jei kūrėjasanksčiau buvo patikrinęs šį filialą. Pagal šį scenarijų jo vietinėje saugykloje vis tiek bus nuorodų žurnalai.

Jei prižiūrėtojas negali susigrąžinti filialo, filialo savininkas, kuris jį ištrynė, turi susigrąžinti iš savo vietos replikų.

3 atvejis - „Hook“ scenarijus su ypatingomis privilegijomis ištrina šaką

Tai gali būti retas atvejis, tačiau galimas scenarijus, kai „hook“ scenarijus įsijungia per tam tikrą „git“ operacijos įvykį ir jėga pašalina dar nesujungtas šakas. Tu galiapsvarstykite, ar viena iš pirmiau minėtų komandų yra užrašyta „hook“ scenarijuje su sudo teisėmis.

Dabar, kai žinote, kas nutinka, ištrindami filialą, pereikime prie šio straipsnio „Git Reflog“ ir sužinokime, kaip atkurti prarastą šaką.

Atkurkite ištrintą filialą naudodami „Git Reflog“

1 žingsnis : Visų nuorodų istorijos žurnalai

Gaukite visų šioje saugykloje esančių nuorodų („master“, „uat“ ir „prepod“) vietinių įrašytų istorijos žurnalų sąrašą.

eiti reflog

2 žingsnis : Nustatykite istorijos antspaudą

Kaip galite nurodyti iš pirmiau pateiktos momentinės nuotraukos, Paryškintas įsipareigojimo ID: e2225bb kartu su HEAD žymeklio rodikliu: 4 yra tas, kai perparduoti Filialas buvo sukurtas pagal dabartinį HEAD žymeklį, nukreipiantį į jūsų naujausią darbą.

3 žingsnis : Atsigauti

Norėdami susigrąžinti atgal ‘Perpardavimas ‘Filialas naudoja komandą„Git checkout“, perduodant HEAD žymeklio nuorodą su indekso ID - 4.Tai yra žymeklio nuoroda, kai „preprod“ šaka buvo sukurta ilgo įsipareigojimo ID, paryškintu išvesties ekrano kopijoje.

git checkout -b preprod HEAD @ {4}

Rezultatas

Ir voila! „ perparduoti „Filialas atkuriamas kartu su visu jūsų šaltinio kodu.

PASTABA : Leisk man bPaleiskite anksčiau naudojamą komandą „git checkout“ ir padėsite geriau suprasti:

„Git checkout“ komanda yra perkelta komanda (kaip ir bet kuri „Java“ perkrauta funkcija). Tai dalis, kurioje atgaunamas tikrasis filialas.

Ši viena komanda pirmiausia patikrina ankstesnę istorijos laiko žymę, kurią nurodo „HEAD @ {4}“ žymeklis tada sukuria filialą pavadinimu „preprod“ naudodama „-b“ parinktį, taip pat perjungia savo darbo katalogą į naujai sukurtą šaką.

Tai reiškia, kad perjungta šaka bus iš „master“ į „preprod“, kaip nurodyta išvesties ekrane.Dabar galite jį sujungti su „master“ arba „release“ atšaka pagal savo šakojimo modelį.

Dabar, kai žinote, kaip atkurti filialą, leiskite man pasakyti, koks darbas atkuriamas, kai atkuriama ištrinta šaka.

Koks darbas atkuriamas, kai atkuriama ištrinta šaka?

Failai, kurie buvo patalpinti ir išsaugoti aplanko indeksų sąraše, bus atkurti. Visi nestebimi failai bus prarasti. Taip pat ašTai yra gera idėja visada pasiruošti savo darbui ar juos palikti.

Norėdami gauti tam tikros šakos ar žymos žurnalo nuorodas, vykdykite komandą - „git reflog“.

Pavyzdys: Norėdami patikrinti vien „uat“ šakos žurnalo nuorodas, naudokite komandą - „git reflog uat“.

„Git Reflog“ pakomandos

eiti reflog

Komanda atidarykite vadovą puslapį

$ git reflog - pagalba

Rezultatas

eiti reflog Rodyti

Parodo komandinėje eilutėje pateiktos nuorodos žurnalus.

„git reflog“ šou meistras @ {0}

eiti reflog pasibaigti

Ši komanda naudojama senesniems reflog įrašams apkarpyti.

„git reflog“ galiojimo laikas baigiasi

eiti reflog Ištrinti

Ši komanda pašalina pavienius įrašus iš reflog istorijos.

git reflog ištrinti

eiti reflog egzistuoja

Ši komanda patikrina, ar ref (filialas ar žyma) turi reflog - žurnalo istorijos įrašus.

„git reflog“ egzistuoja

Be pirmiau minėtų komandų, „Git Reflog“ komandai reikalingos įvairios pakomandos ir skirtingos parinktys, priklausomai nuo aukščiau paminėtų pakomandų. Tolesniam skaitymui „ git reflog - pagalba “Iš terminalo lango.

Tuo mes baigėme šį straipsnį apie „Git Reflog“.„DevOps“ tikslas - greičiau ir patikimiau sukurti geresnės kokybės programinę įrangą, tuo pačiu pakviečiant didesnį komandų bendravimą ir bendradarbiavimą. Jei jus domina šis straipsnis, c Heck out the 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 tai paminėti straipsnio „Git Reflog“ komentarų skyriuje ir mes susisieksime su jumis kuo greičiau.