Git Reflog - Hvordan gjenopprette en slettet gren som ikke ble slått sammen



Denne artikkelen om Git Reflog er en omfattende guide til hvordan du gjenoppretter de slettede forgrenede i Git ved hjelp av Git Reflog.

“Har du noen gang mistet en filial, hvis kildekode ennå ikke var slått sammen i“ release ”-grenen eller“ main ”-grenen? Hva om du vil regenerere en slettet gren, selv om arbeidet allerede er slått sammen til hovedgrenen? ' . Vel, den eneste løsningen på slike scenarier er Gå på nytt .

Gjennom denne artikkelen om Git Reflog, vil jeg hjelpe degforstå scenariene der arbeidet ditt med en filial kan gå tapt, og hvordan du kan gjenopprette filialen.Denne artikkelen vil også fremheve tilnærmingen du kan ta for å forhindre utilsiktet tap av en filial mens du arbeider i et stort prosjekt.





    1. Hva er Git Reflog?
    2. Hvordan og når en filial blir slettet?
    3. Gjenopprett en slettet gren
    4. Hvilket arbeid gjenopprettes når den slettede grenen gjenopprettes?
    5. Git Reflog underkommandoer

Så la oss komme i gang med denne artikkelen.



Tenk på et scenario, et maintainer må slå sammen mange funksjonsgrener fra forskjellige samarbeidspartnere og deretter slette dem til slutt, men filialen slettes ved et uhell før arbeidet kan slås sammen?

Vel, før jeg går videre med denne artikkelen, la meg fortelle deg at det ikke er mulig i Git. er sikre og fungerer som et sjekkinnlegg ikke tillater deg å gjøre det. Så, dette hvor Git Reflog kommer inn i bildet.

Hva er Git Reflog?

De‘Reflog’ kommando holder en spor av hver eneste endring som er gjort i referansene (grener eller koder) i et depot og fører en logglogg over grenene og kodene som enten ble opprettet lokalt eller sjekket ut. Referanselogger som for eksempel øyeblikksbildet for kommisjon av når grenen ble opprettet eller klonet, sjekket ut, omdøpt eller eventuelle forpliktelser gjort på grenen vedlikeholdes og oppført av kommandoen ‘reflog’.



Merk: Filialen kan bare gjenopprettes fra arbeidskatalogen din hvis filialen noen gang har eksistert i ditt lokale depot, dvs. grenen ble enten opprettet lokalt eller sjekket ut fra et eksternt lager i ditt lokale lager for Git for å lagre referanseloggloggene.

Denne kommandoen må utføres i depotet som hadde den mistede grenen. Hvis du vurdererekstern lagringssituasjon, så må du utføre reflog-kommandoen på utviklerens maskin som hadde filialen.

kommando: gå på nytt

Nå som du vet, hva er Git Reflog, la ossprøv å slette både en sammenslått og en ikke-sammenslått gren og se hvordan Git håndterer det?

Trinn 1: Liste opp grenene som er slått sammen til master

Sjekk først ut i herre ’Gren hvis du er på en annen gren ved hjelp av kommandoen:

$ git checkout master

Produksjon

Git Checkout Master - Git Reflog - Edureka

For å få en liste over sammenslåtte grener, nevn følgende kommando:

$ git gren - sammenslått

Produksjon:

Trinn 1.1: Slett deretter den sammenslåtte grenen:

$ git branch -d utgave # 902

Produksjon:

Filialen 'utgave # 902' ble slettet, siden den allerede er slått sammen til 'master' -grenen.

Trinn 2: La oss nå liste opp grenene som ikke er slått sammen til master.

$ git filial - ikke-sammenslått

Produksjon

Trinn 2.2: La oss til slutt slette en ikke-sammenslått gren med følgende kommando:

$ git branch -d prepod

Hvis du prøver å slette en av grenene med uferdig arbeid, si 'preprod' -gren, viser git en advarsel.

hva brukes sas programmering til

Produksjon

Nå, før jeg forteller deg hvordan du kan gjenopprette dataene denne artikkelen på Git Reflog, la meg fortelle deg hva som skjer når en filial blir slettet, og under hvilke omstendigheter kan filialen gjenopprettes.

Hvordan og når en filial blir slettet?

Som vi vet at Git er en Distribuert versjonskontrollsystem (DVCS), hver maskin med klonen eller en kopi av depotet fungerer som begge deler node og en hub . Detteinnebærer at hver maskin vil ha sin egen kopi av hele depotkoden og historikken.Unødvendig å si at du vil være deling arbeidet ditt med andre og publisering det samme.

Derfor kan det i slike scenarier være tre tilfeller når en filial blir slettet i et virkelig scenario med mange bidragsytere som jobber med et stort prosjekt. Følgende kan være tilfellene:

Sak 1 - En utvikler kan enten slå sammen eller slette grenen

Tenk på et scenario der en utvikler fusjonerer funksjonsgrenen i hovedgrenen lokalt og deretter sletter funksjonsgrenen ved å bruke ' git gren Kommando med “- d ”Flagg som sett i de tidligere skjermbildene.

Kommando: ‘Git branch -d branch_name’

Det kan også hende at utvikleren bestemmer seg for å kaste endringene på grenen og bestemmer seg for å slette grenen uten å slå den sammen med noen annen gren ved hjelp av følgende kommando:

Kommando: ‘Git branch -D branch_name’

Med kommandoen ovenfor er utvikleren detslett grenen kraftig som overstyr git-advarselen

$ git branch -D preprod

Produksjon

Merk : 'Preprod' gren blir ikke lenger oppført når du kjører kommandoen 'git branch'. Så, yvårt arbeid som er lagret på denne grenen, vil gå tapt.

Sak 2 - En utvikler sletter en filial i et delt lager

hva er anaconda for python

Tenk på et scenario der en utvikler med lese- / skrivetilgang prøver å slette den eksterne grenen kraftig avved å bruke kommandoen ‘git push’ med flagget ‘–delete’.

$ git push origin - slett hurtigreparasjon

Produksjon

Bortsett fra dette, kan det også være et tilfelle der en ikke-autorisert eller ondsinnet bruker tvinger et trykk for å slette den eksterne grenen.I slike tilfeller vil vedlikeholderen bare kunne gjenopprette den slettede 'quickfix'-grenen hvis utviklerenhadde tidligere sjekket ut denne grenen. I dette scenariet vil det lokale depotet fremdeles ha referanselogger over det.

Hvis vedlikeholderen ikke kan gjenopprette grenen, må eieren av grenen som slettet den, komme seg fra sine lokale reflogs.

Sak 3 - Et krokscript med super privilegier sletter filialen

Dette kan være en sjelden, men et mulig scenario at et krokskript blir utløst ved visse git-operasjonshendelser og kraft sletter grenene som ikke er slått sammen ennå. Du kanvurdere en av de ovennevnte kommandoene som er skriptet i et krokskript med sudo-privilegier.

Nå som du vet hva som skjer, når vi sletter grenen, la oss gå videre med denne artikkelen på Git Reflog og se hvordan du kan gjenopprette en mistet gren.

Gjenopprett en slettet gren ved hjelp av Git Reflog

Trinn 1 : Historikklogger over alle referansene

Få en liste over alle de lokale registrerte loggene for alle referansene ('master', 'uat' og 'prepod') i dette depotet.

gå på nytt

Steg 2 : Identifiser historikkstemplet

Som du kan referere fra øyeblikksbildet ovenfor, Fremhevet kommisjons-ID: e2225bb sammen med HEAD-pekerindeksen: 4 er den når ‘ videresalg Gren ble opprettet fra den nåværende HEAD-pekeren som pekte på det siste arbeidet ditt.

Trinn 3 : Komme seg

Å gjenopprette tilbake ‘Videresalg ‘Gren bruk kommandoen‘Git checkout’ som passerer HEAD-pekerreferansen med indeks-ID - 4.Dette er pekereferansen når 'preprod' -grenen ble opprettet med lang kommisjons-ID uthevet i utgangsskjermbildet.

git checkout -b preprod HEAD @ {4}

Produksjon

Og voila! ‘ videresalg ‘Filial blir gjenopprettet med all kildekoden din.

MERK : La meg breakup kommandoen ‘git checkout’ som brukes ovenfor, og hjelpe deg med å forstå bedre:

‘Git checkout’ kommando er en overbelastet kommando (Akkurat som enhver Java overbelastet funksjon). Dette er den delen der selve grenen blir gjenopprettet.

Denne enkle kommandoen sjekker først ut til det tidligere tidsstempelet som ble pekt av HEAD @ {4} peker og oppretter deretter en gren med navnet 'preprod' ved å bruke alternativet '-b', samt bytter arbeidskatalogen din til den nyopprettede grenen.

Dette innebærer at grenen byttet vil være fra 'master' til 'preprod' som angitt i utgangsskjermen.Du kan nå slå det sammen med 'master' eller 'release' -grenen i henhold til din forgreningsmodell.

Nå som du vet hvordan du gjenoppretter en gren, la meg fortelle deg hvilket arbeid som gjenopprettes når en slettet gren gjenopprettes.

Hvilket arbeid gjenopprettes når den slettede grenen gjenopprettes?

Filene som ble lagret og lagret i listen med stashindekser, blir gjenopprettet. Usporede filer går tapt. Også jegt er en god ide å alltid iscenesette og forplikte arbeidet ditt eller stash dem.

For å hente loggreferansene til en bestemt gren eller tag kjører du kommandoen - 'git reflog'.

Eksempel: For å sjekke loggreferansene til ‘uat’ gren alene, bruk kommandoen - “git reflog uat”.

Git Reflog underkommandoer

gå på nytt

Kommando for å åpne den manuelle siden

$ git reflog - hjelp

Produksjon

gå på nytt vise fram

Viser loggene til referansen i kommandolinjen.

git reflog show master @ {0}

gå på nytt utløpe

Denne kommandoen brukes til å beskjære eldre reflogoppføringer.

git reflog utløper

gå på nytt slett

Denne kommandoen sletter enkeltoppføringer fra reflog-historikken.

git reflog slett

gå på nytt eksisterer

Denne kommandoen sjekker om en ref (gren eller tag) har en reflog - loggoppføringer.

git reflog eksisterer

Bortsett fra de ovennevnte kommandoene, tar kommandoen “Git Reflog” forskjellige underkommandoer, og forskjellige alternativer avhengig av underkommandoene som er nevnt ovenfor. For videre lesekjøring “ git reflog –help ”Fra terminalvinduet.

Med dette kommer vi til en slutt på denne artikkelen om Git Reflog.Intensjonen til DevOps er å lage programvare av bedre kvalitet raskere og med mer pålitelighet, samtidig som man inviterer til større kommunikasjon og samarbeid mellom teamene. Hvis du er interessert i denne artikkelen, c pokker ut av Edureka, et pålitelig online læringsfirma med et nettverk med mer enn 250 000 fornøyde elever spredt over hele verden. Edureka DevOps Certification Training-kurset hjelper elever til å forstå hva som er DevOps og få ekspertise i forskjellige DevOps-prosesser og verktøy som Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack og GIT for å automatisere flere trinn i SDLC.

Har du spørsmål til oss? Vennligst nevn det i kommentarfeltet i 'Git Reflog' -artikkelen, så kommer vi tilbake til deg ASAP.