Git Reflog: com recuperar una sucursal suprimida que no s'ha fusionat



Aquest article sobre Git Reflog és una guia completa sobre com restaurar els suprimits ramificats a Git amb l'ajut de Git Reflog.

'Heu perdut alguna vegada una sucursal el codi font del qual encara no s'hagi fusionat a la branca' release 'o a la branca' principal '? Què passa si voleu regenerar una branca suprimida encara que el seu treball ja s'ha fusionat amb la branca principal? ' . Bé, l’única solució a aquests escenaris és Vés a Reflog .

A través d’aquest article sobre Git Reflog, us ajudaréentendre els escenaris en què es podria perdre el vostre treball a una sucursal i com recuperar-la.A més, en aquest article es ressaltarà l’enfocament que podeu adoptar per evitar la pèrdua no desitjada d’una sucursal mentre treballa en un gran projecte.





    1. Què és Git Reflog?
    2. Com i quan se suprimeix una sucursal?
    3. Recupereu una sucursal suprimida
    4. Quin treball es restaura quan es recupera la branca suprimida?
    5. Subordres de Git Reflog

Comencem, doncs, amb aquest article.



Penseu en un escenari, un maintainer ha de combinar moltes branques de funcions de diferents col·laboradors i, a continuació, eliminar-les, però la branca se suprimeix accidentalment abans de poder fusionar el treball?

Bé, abans de continuar amb aquest article, permeteu-me dir-vos que no és possible a Git. són segurs i actuen com un lloc de control no us ho permetria. Per tant, aquí apareix Git Reflog.

Què és Git Reflog?

ElL'ordre 'reflog' manté a pista de cada canvi realitzat a les referències (branques o etiquetes) d'un dipòsit i guarda un historial de registres de les branques i etiquetes que s'han creat localment o s'han comprovat. Els registres de referència, com ara la instantània de confirmació de quan es va crear o clonar la branca, es va retirar, va canviar el nom o qualsevol confirmació que es fa a la branca es manté i apareix a l’ordre ‘reflog’.



Nota: La branca es podrà recuperar del directori de treball només si la branca ha existit mai al vostre dipòsit local, és a dir, la branca es va crear localment o es va retirar des d'un dipòsit remot del vostre dipòsit local perquè Git pogués emmagatzemar els registres de l'historial de referència.

Aquesta ordre s'ha d'executar al dipòsit que tenia la branca perduda. Si teniu en compte elsituació del dipòsit remot, haureu d’executar l’ordre reflog a la màquina del desenvolupador que tenia la sucursal.

aplicacions d’anàlisi de big data

comandament: vés reflog

Ara que ja ho sabeu, què és Git Reflog, deixeu-nos-hoproveu de suprimir una branca combinada i una branca no combinada i veure com Git gestiona això?

Pas 1: llista de les branques que es combinen en mestre

Primer, fes un cop d'ull a la secció ' mestre 'Branch si esteu en alguna altra branca mitjançant l'ordre:

$ git checkout master

Sortida

Git Checkout Master - Git Reflog - Edureka

Ara, per obtenir una llista de les branques combinades, mencioneu l'ordre següent:

$ git branch: fusionada

Sortida:

Pas 1.1: a continuació, suprimiu la branca combinada:

$ git branch -d número 902

Sortida:

La branca 'número 902' s'ha suprimit correctament, ja que ja s'ha fusionat amb la branca 'mestra'.

Pas 2: llistem ara les branques que no es combinen en mestre.

$ git branch: no combinada

Sortida

Pas 2.2: Finalment, suprimim una branca no combinada amb l'ordre següent:

$ git branch -d prepod

Si intenteu suprimir una de les branques amb un treball sense acabar, digueu la branca “preproducció”, git mostra un missatge d’advertència.

Sortida

Ara, abans de dir-vos com podeu recuperar les dades d’aquest article a Git Reflog, permeteu-me dir-vos què passa exactament quan se suprimeix una sucursal i en quines circumstàncies es pot recuperar la sucursal.

Com i quan se suprimeix una sucursal?

Com sabem, Git és un Sistema de control de versions distribuït (DVCS), totes les màquines amb el clon o una còpia del dipòsit actuen com a totes dues node i a hub . Aixòimplica que cada equip tindrà la seva pròpia còpia de tot el codi del repositori i de l’historial.No cal dir que ho seràs compartint el vostre treball amb els altres i publicació el mateix.

Per tant, en aquests escenaris, hi pot haver 3 casos en què una sucursal s’elimini en un escenari del món real amb molts col·laboradors que treballen en un gran projecte. Podrien ser els casos següents:

Cas 1: un desenvolupador pot combinar o suprimir la branca

Penseu en un escenari en què un desenvolupador fusioni localment la branca de funcions amb la branca principal i, a continuació, suprimeixi la branca de funcions mitjançant branca git 'Amb el comandament '- d ”Com es mostra a les captures de pantalla anteriors.

Comandament: 'Git branch -d nom_branca'

També pot passar que el desenvolupador decideixi eliminar els canvis a la branca i que decideixi suprimir la branca sense fusionar-la amb cap altra branca mitjançant l'ordre següent:

com configurar un eclipsi

Comandament: 'Git branch -D nom_branca'

Amb l'ordre anterior, el desenvolupador ho éssuprimiu amb força la branca substituint l'avís de git

$ git branch -D preproducció

Sortida

Nota : La branca 'preprod' ja no apareixerà quan executeu l'ordre 'git branch'. Per tant, síel nostre treball guardat en aquesta branca es perdrà.

Cas 2: un desenvolupador suprimeix una sucursal en un dipòsit compartit

Penseu en un escenari en què un desenvolupador amb accés de lectura / escriptura intenta suprimir la branca remota amb forçamitjançant l’ordre ‘git push’ amb el senyalador ‘–esborra’.

$ git push origin --delete quickfix

Sortida

A part d'això, també hi pot haver un cas en què un usuari no autoritzat o malintencionat obligui a suprimir la branca remota.En aquest cas, el mantenidor podrà recuperar la branca 'quickfix' suprimida només si el desenvolupadorhavia consultat prèviament aquesta sucursal. En aquest escenari, el seu dipòsit local encara tindrà registres de referència.

Si el mantenidor no pot recuperar la sucursal, el propietari de la sucursal que l’ha suprimit ha de recuperar-se dels seus reflogs locals.

Cas 3: un script de ganxo amb super privilegis elimina la branca

Podria ser un cas rar, però, un possible escenari que un script de ganxo s'activi en cert esdeveniment d'operació de git i que la força elimini les branques que encara no s'han fusionat. Tu potsconsidereu que una de les ordres esmentades anteriorment està escrita en un script de ganxo amb privilegis sudo.

Ara, ja que sabeu què passa, quan suprimiu la sucursal, anem a continuar amb aquest article sobre Git Reflog i veurem com recuperar una sucursal perduda.

Recupereu una sucursal suprimida mitjançant Git Reflog

Pas 1 : Registres d'historial de totes les referències

Obteniu una llista de tots els registres d’història registrats locals per a totes les referències (‘master’, ‘uat’ i ‘prepod’) d’aquest dipòsit.

vés reflog

Pas 2 : Identifiqueu el segell d’història

Com podeu fer referència a la instantània anterior, el fitxer Identificador de confirmació ressaltat: e2225bb juntament amb l'índex de punter HEAD: 4 és quan revenda 'Branca es va crear a partir del punter HEAD actual que apunta al vostre darrer treball.

Pas 3 : Recupera

Per recuperar de nou el fitxer ‘Revenda 'Branch utilitza l'ordre'Git checkout' passant la referència del punter HEAD amb l'identificador d'índex - 4.Aquesta és la referència del punter quan es va crear la branca 'preprod', identificador de commit llarg ressaltat a la captura de pantalla de sortida.

git checkout -b preprod HEAD @ {4}

Sortida

I voilà! ' revenda 'Branch es recupera de nou amb tot el vostre codi font.

NOTA : Deixa'm bdescarregueu l’ordre ‘git checkout’ que s’utilitza més amunt i us ajudarà a entendre millor:

L’ordre ‘git checkout’ és una ordre sobrecarregada (igual que qualsevol funció de Java sobrecarregada). Aquesta és la part on es recupera la branca real.

Aquesta única ordre comprova primer la marca de temps de la història anterior que assenyala el fitxer Punter HEAD @ {4} i, a continuació, crea una branca amb el nom ‘preprod’ mitjançant l’opció “-b” i canvia el directori de treball a la branca recentment creada.

Això implica que la branca commutada passarà de 'mestre' a 'preproducció' tal com s'indica a la pantalla de sortida.Ara podeu combinar-lo amb la branca 'master' o la 'release' segons el vostre model de ramificació.

Ara, que ja sabeu com restaurar una branca, permeteu-me que us expliqui quina feina es restaura quan es recupera una branca suprimida.

Quin treball es restaura quan es recupera la branca suprimida?

Els fitxers guardats i desats a la llista d'índexs d'emmagatzematge es recuperaran de nou. Es perdran tots els fitxers sense rastrejar. Jo tambéNo és una bona idea posar en escena i comprometre sempre el vostre treball o deixar-los en suspens.

Per obtenir les referències de registre d'una branca o etiqueta en particular, executeu l'ordre - 'git reflog'.

Exemple: per comprovar les referències de registre de la branca ‘uat’ només utilitzeu l’ordre - 'git reflog uat'.

Subordres de Git Reflog

vés reflog

Ordre per obrir la pàgina del manual

$ git reflog --help

Sortida

vés reflog espectacle

Mostra els registres de la referència proporcionada a la línia d'ordres.

git reflog show master @ {0}

vés reflog expiri

Aquesta ordre s'utilitza per podar les entrades de reflog més antigues.

git reflog caduca

vés reflog esborrar

Aquesta ordre elimina entrades individuals de l'historial de reflog.

git reflog delete

vés reflog existeix

pivot i unpivot al servidor sql

Aquesta ordre comprova si un ref (branca o etiqueta) té entrades d'historial de registre de reflog.

git reflog existeix

A part de les ordres esmentades, l'ordre 'Git Reflog' té diversos subcomandos i diferents opcions en funció dels subcomandaments esmentats anteriorment. Per llegir més, executeu ' git reflog –help ”Des de la finestra del terminal.

Amb això, arribem al final d’aquest article sobre Git Reflog.La intenció de DevOps és crear programari de millor qualitat més ràpidament i amb més fiabilitat, alhora que convida a una major comunicació i col·laboració entre equips. Si esteu fascinat per aquest article, c fes un cop d'ull al per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. El curs de formació en certificació Edureka DevOps ajuda els estudiants a entendre què és DevOps i obtenir experiència en diversos processos i eines DevOps com Puppet, Jenkins, Nagios, Ansible, Xef, Saltstack i GIT per automatitzar diversos passos en SDLC.

Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris de l'article 'Git Reflog' i us respondrem el més aviat possible.