Git Reflog - Hoe een verwijderde branch te herstellen die niet is samengevoegd



Dit artikel over Git Reflog is een uitgebreide gids voor het herstellen van de verwijderde vertakking in Git met behulp van Git Reflog.

'Ben je ooit een branch kwijtgeraakt waarvan de broncode nog niet was samengevoegd in de‘ release ’branch of de‘ main ’branch? Wat als je een verwijderde branch opnieuw wilt genereren terwijl het werk al is samengevoegd met de hoofdtak? ' . Nou, de enige oplossing voor dergelijke scenario's is Ga opnieuw loggen .

Door middel van dit artikel over Git Reflog, zal ik je helpenbegrijp de scenario's waarin uw werk aan een branch verloren kan gaan en hoe u de branch kunt herstellen.In dit artikel wordt ook de aanpak belicht die u kunt nemen om het onbedoeld verlies van een filiaal tijdens het werken in een groot project te voorkomen.





    1. Wat is Git Reflog?
    2. Hoe en wanneer wordt een branch verwijderd?
    3. Herstel een verwijderde branch
    4. Welk werk wordt hersteld als de verwijderde branch wordt hersteld?
    5. Git Reflog-subopdrachten

Dus laten we aan de slag gaan met dit artikel.



Overweeg een scenario, een maintainer moet vele feature branches van verschillende medewerkers samenvoegen en ze uiteindelijk verwijderen, maar de branch wordt per ongeluk verwijderd voordat het werk kan worden samengevoegd?

Voordat ik verder ga met dit artikel, wil ik je zeggen dat het niet mogelijk is in Git. zijn veilig en fungeren als een controlepost die u niet toestaat dit te doen. Dus dit is waar Git Reflog in beeld komt.

Wat is Git Reflog?

De‘Reflog’ commando houdt een spoor van elke afzonderlijke wijziging in de referenties (branches of tags) van een repository en houdt een loghistorie bij van de branches en tags die ofwel lokaal zijn aangemaakt of uitgecheckt. Referentielogboeken zoals de commit-momentopname van wanneer de branch is gemaakt of gekloond, uitgecheckt, hernoemd of eventuele commits die op de branch zijn gemaakt, worden bijgehouden door en vermeld door het ‘reflog’ commando.



Opmerking: De branch kan alleen vanuit uw werkmap worden hersteld als de branch ooit in uw lokale repository heeft bestaan, d.w.z. de branch is ofwel lokaal aangemaakt of uitgecheckt vanuit een externe repository in je lokale repository zodat Git zijn referentiegeschiedenislogboeken kan opslaan.

Dit commando moet worden uitgevoerd in de repository met de verloren branch. Als je deexterne repository situatie, dan moet je het reflog commando uitvoeren op de machine van de ontwikkelaar die de branch had.

opdracht: ga reflog

Nu je weet, wat is Git Reflog, laat het ons wetenprobeer je zowel een samengevoegde als een niet-samengevoegde branch te verwijderen en kijk je hoe Git daarmee omgaat?

Stap 1: Maak een lijst van de branches die zijn samengevoegd in master

Bekijk eerst de ‘ meester ’Branch als je op een andere branch zit met het commando:

$ git checkout master

Uitvoer

Git Checkout Master - Git Reflog - Edureka

Om een ​​lijst met samengevoegde branches te krijgen, noem je het volgende commando:

$ git branch --merged

Uitgang:

Stap 1.1: Verwijder vervolgens de samengevoegde branch:

$ git branch -d probleem # 902

Uitgang:

De branch ‘issue # 902’ is succesvol verwijderd omdat deze al is samengevoegd in de ‘master’ branch.

Stap 2: Laten we nu een lijst maken van de branches die niet in master zijn samengevoegd.

$ git branch --no-merged

Uitvoer

Stap 2.2: Laten we tot slot een niet-samengevoegde branch verwijderen met het volgende commando:

$ git branch -d prepod

Als je een van de branches probeert te verwijderen terwijl het werk nog niet is voltooid, zeg dan “preprod” branch, geeft git een waarschuwingsbericht weer.

Uitvoer

Nu, voordat ik je vertel hoe je de gegevens in dit artikel op Git Reflog kunt herstellen, wil ik je vertellen wat er precies gebeurt als een branch wordt verwijderd en onder welke omstandigheden de branch kan worden hersteld.

Hoe en wanneer wordt een branch verwijderd?

Zoals we weten is Git een Gedistribueerd versiebeheersysteem (DVCS), werkt elke machine met de kloon of een kopie van de repository als beide knooppunt en een hub . Dezeimpliceert dat elke machine zijn eigen kopie van de volledige repositorycode en geschiedenis zal hebben.Onnodig te zeggen dat je dat zult zijn delen uw werk met anderen en publiceren hetzelfde.

Daarom kunnen er in dergelijke scenario's 3 gevallen zijn waarin een branch wordt verwijderd in een real-world scenario met veel bijdragers die aan een groot project werken. Het volgende kan de gevallen zijn:

Geval 1 - Een ontwikkelaar kan de vertakking samenvoegen of verwijderen

Beschouw een scenario waarin een ontwikkelaar de feature branch lokaal in de hoofd branch voegt en vervolgens de feature branch verwijdert met de ' git branch ’Commando met de' - d ”Vlag zoals te zien in de eerdere screenshots.

Opdracht: ‘Git branch -d branch_name’

Het kan ook gebeuren dat de ontwikkelaar besluit om de wijzigingen op de branch te verwijderen en besluit de branch te verwijderen zonder deze met een andere branch samen te voegen met behulp van het volgende commando:

Opdracht: ‘Git branch -D branch_name’

Met het bovenstaande commando is de ontwikkelaarverwijder met geweld de branch die de git-waarschuwing overschrijft

$ git branch -D preprod

Uitvoer

Opmerking : ‘Preprod’ branch zal niet langer worden weergegeven als je het ‘git branch’ commando uitvoert. Dus jaons werk dat op deze tak is opgeslagen, gaat verloren.

Geval 2 - Een ontwikkelaar verwijdert een branch in een gedeelde repository

Beschouw een scenario waarin een ontwikkelaar met lees- / schrijftoegang probeert de externe vertakking krachtig te verwijderen doormet behulp van het ‘git push’ commando met de ‘–delete’ vlag.

$ git push origin --delete quickfix

Uitvoer

Afgezien hiervan kan er ook een geval zijn waarin een niet-geautoriseerde of kwaadwillende gebruiker een push afdwingt om de remote branch te verwijderen.In dat geval kan de onderhouder de verwijderde ‘quickfix’ branch alleen herstellen als de ontwikkelaarhad eerder deze tak uitgecheckt. In dit scenario heeft de lokale repository er nog steeds referentielogboeken van.

Als de onderhouder de branch niet kan herstellen, moet de eigenaar van de branch die deze heeft verwijderd herstellen van zijn / haar lokale reflogs.

Geval 3 - Een hook-script met superprivileges verwijdert de branch

Dit zou een zeldzaam, maar mogelijk scenario kunnen zijn dat een hook-script wordt geactiveerd bij een bepaalde git operation-gebeurtenis en geforceerd de branches verwijdert die nog niet zijn samengevoegd. Jij kanoverweeg dat een van de bovengenoemde commando's wordt gescript in een hook-script met sudo-privileges.

Nu je weet wat er gebeurt, als je de branch verwijdert, laten we verder gaan met dit artikel over Git Reflog en kijken hoe je een verloren branch kunt herstellen.

Herstel een verwijderde branch met Git Reflog

Stap 1 : Geschiedenislogboeken van alle referenties

Haal een lijst op van alle lokale geregistreerde geschiedenislogboeken voor alle referenties (‘master’, ‘uat’ en ‘prepod’) in deze repository.

ga reflog

Stap 2 : Identificeer de geschiedenisstempel

Zoals u kunt zien aan de hand van de bovenstaande momentopname, is de Gemarkeerde commit-ID: e2225bb samen met de HEAD pointer index: 4 is degene wanneer ‘ wederverkoop ’Branch is gemaakt op basis van de huidige HEAD-pointer die naar je laatste werk verwijst.

Stap 3 : Herstellen

Om het 'Wederverkoop ‘Branch gebruikt u het commando‘Git checkout’ doorgeven van de HEAD-pointerreferentie met de index-id - 4.Dit is de pointerreferentie toen de ‘preprod’ -tak werd gemaakt met een lange vastleggings-id die in de output-screenshot is gemarkeerd.

git checkout -b preprod HEAD @ {4}

Uitvoer

En voila! ‘ wederverkoop ‘Branch wordt teruggehaald met al uw broncode.

OPMERKING : Laat me bherhaal het hierboven gebruikte ‘git checkout’ -commando en help je het volgende beter te begrijpen:

breidt zich uit en implementeert samen in java

‘Git checkout’ commando is een overbelast commando (net als elke andere Java overbelaste functie). Dit is het gedeelte waar de eigenlijke tak wordt hersteld.

Deze enkele opdracht checkt eerst uit naar het tijdstempel van de eerdere geschiedenis, aangegeven door de HEAD @ {4} aanwijzer en maakt vervolgens een branch aan met de naam ‘preprod’ met behulp van de optie '-b' en schakelt je werkdirectory over naar de nieuw gemaakte branch.

Dit impliceert dat de omgeschakelde vertakking van ‘master’ naar ‘preprod’ gaat, zoals aangegeven in het uitvoerscherm.Je zou het nu kunnen mergen met ‘master’ of de ‘release’ branch volgens je branching-model.

Nu je weet hoe je een branch moet herstellen, laat me je vertellen welk werk wordt hersteld als een verwijderde branch wordt hersteld.

Welk werk wordt hersteld als de verwijderde branch wordt hersteld?

De bestanden die waren opgeslagen en opgeslagen in de stash-indexlijst zullen worden hersteld. Alle niet-bijgehouden bestanden gaan verloren. Ook ikHet is een goed idee om uw werk altijd op te voeren en vast te leggen of op te bergen.

Om de logboekreferenties van een bepaalde branch of tag op te halen, voer je het commando - “git reflog” uit.

Voorbeeld: om alleen de logreferenties van de ‘uat’ branch te controleren, gebruik je het commando - 'git reflog uat'.

Git Reflog-subopdrachten

ga reflog

Commando om de man-pagina te openen

$ git reflog --help

Uitvoer

ga reflog tonen

Toont de logboeken van de referentie op de opdrachtregel.

git reflog show master @ {0}

ga reflog verlopen

Deze opdracht wordt gebruikt om de oudere reflog-items te verwijderen.

git reflog verlopen

ga reflog verwijderen

Met deze opdracht worden afzonderlijke items uit de reflog-geschiedenis verwijderd.

git reflog verwijderen

ga reflog bestaat

Dit commando controleert of een ref (branch of tag) een reflog-log historie-items heeft.

git reflog bestaat

Afgezien van de bovengenoemde commando's, heeft het “Git Reflog” commando verschillende subcommando's, en verschillende opties afhankelijk van de subcommando's die hierboven genoemd zijn. Voor meer informatie, ga naar “ git reflog –help ”Uit het terminalvenster.

Hiermee komen we een einde aan dit artikel op Git Reflog.De bedoeling van DevOps is om sneller en betrouwbaarder software van betere kwaliteit te maken en tegelijkertijd meer communicatie en samenwerking tussen teams uit te nodigen. Als je geïntrigeerd bent door dit artikel, c ach uit de door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 250.000 tevreden leerlingen verspreid over de hele wereld. De Edureka DevOps Certification Training-cursus helpt leerlingen te begrijpen wat DevOps is en expertise op te doen in verschillende DevOps-processen en -tools zoals Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack en GIT voor het automatiseren van meerdere stappen in SDLC.

Heeft u een vraag voor ons? Vermeld het in het commentaargedeelte van het artikel 'Git Reflog' en we nemen zo snel mogelijk contact met u op.