Git Reflog: cómo recuperar una rama eliminada que no se fusionó



Este artículo sobre Git Reflog es una guía completa sobre cómo restaurar la ramificación eliminada en Git con la ayuda de Git Reflog.

'¿Alguna vez ha perdido una rama cuyo código fuente aún no se haya fusionado en la rama' versión 'o la rama' principal '? ¿Qué sucede si desea volver a generar una rama eliminada aunque su trabajo ya se ha fusionado con la rama principal? ' . Bueno, la única solución para tales escenarios es Ir a Reflog .

A través de este artículo sobre Git Reflog, te ayudarécomprender los escenarios en los que podría perderse su trabajo en una rama y cómo recuperarla.Además, este artículo destacará el enfoque que podría tomar para evitar la pérdida involuntaria de una sucursal mientras trabaja en un proyecto grande.





    1. ¿Qué es Git Reflog?
    2. ¿Cómo y cuándo se elimina una rama?
    3. Recuperar una rama eliminada
    4. ¿Qué trabajo se restaura cuando se recupera la rama eliminada?
    5. Subcomandos de Git Reflog

Entonces, comencemos con este artículo.



Considere un escenario, una maintainer tiene que fusionar muchas ramas de características de diferentes colaboradores y luego eliminarlas eventualmente, pero la rama se elimina accidentalmente antes de que el trabajo pueda fusionarse?

Bueno, antes de continuar con este artículo, déjame decirte que no es posible en Git. son seguros y actúan como un puesto de control que no le permitiría hacerlo. Entonces, aquí es donde Git Reflog entra en escena.

¿Qué es Git Reflog?

losEl comando 'reflog' mantiene un pista de cada cambio hecho en las referencias (ramas o etiquetas) de un repositorio y mantiene un historial de registro de las ramas y etiquetas que se crearon localmente o se extrajeron. Los registros de referencia, como la instantánea de confirmación de cuándo se creó o clonó la rama, se desprotegió, se renombró o cualquier confirmación realizada en la rama, es mantenida por y enumerados por el comando 'reflog'.



Nota: La rama será recuperable de su directorio de trabajo solo si la rama alguna vez existió en su repositorio local, es decir, la rama se creó localmente o se extrajo de un repositorio remoto en su repositorio local para que Git almacene sus registros de historial de referencia.

Este comando debe ejecutarse en el repositorio que tenía la rama perdida. Si consideras elsituación de repositorio remoto, entonces debe ejecutar el comando reflog en la máquina del desarrollador que tenía la rama.

mando: ir a reflog

Ahora que sabes qué es Git Reflog, déjanosintente eliminar tanto una rama fusionada como una no fusionada y vea cómo Git maneja eso?

Paso 1: enumere las ramas que se fusionan en master

Primero, revise el ' Maestro 'Rama si estás en otra rama usando el comando:

$ git checkout master

Salida

es una matriz un objeto en java

Maestro de Git Checkout - Git Reflog - Edureka

Ahora, para obtener una lista de las ramas fusionadas, mencione el siguiente comando:

$ git branch --merged

Salida:

Paso 1.1: Luego, elimine la rama fusionada:

$ git branch -d número # 902

Salida:

La rama 'problema n. ° 902' se eliminó correctamente porque ya se fusionó con la rama 'maestra'.

Paso 2: Ahora, enumeremos las ramas que no están fusionadas en master.

$ git branch --no-fusionado

Salida

Paso 2.2: Finalmente, eliminemos una rama no fusionada con el siguiente comando:

$ git branch -d prepod

Si intentas eliminar una de las ramas con trabajo sin terminar, di 'preprod', git muestra un mensaje de advertencia.

Salida

Ahora, antes de decirte cómo puedes recuperar los datos de este artículo sobre Git Reflog, déjame decirte qué sucede exactamente cuando se elimina una rama y bajo qué circunstancias se puede recuperar.

¿Cómo y cuándo se elimina una rama?

Como sabemos, Git es un Sistema de control de versiones distribuido (DVCS), cada máquina con el clon o una copia del repositorio actúa como nodo y un cubo . Estaimplica que cada máquina tendrá su propia copia de todo el código y el historial del repositorio.No hace falta decir que lo serás compartir tu trabajo con otros y publicación lo mismo.

Por lo tanto, en tales escenarios, podría haber 3 casos en los que una rama se elimina en un escenario del mundo real con muchos colaboradores trabajando en un proyecto grande. Los siguientes podrían ser los casos:

Caso 1: un desarrollador puede fusionar o eliminar la rama

Considere un escenario en el que un desarrollador fusiona la rama de la función en la rama principal de forma local y luego elimina la rama de la función con el ' rama de git 'Comando con el' - re ”Como se ve en las capturas de pantalla anteriores.

Mando: 'Git branch -d branch_name'

También podría suceder que el desarrollador decida tirar a la papelera los cambios en la rama y decida eliminar la rama sin fusionarla con ninguna otra rama usando el siguiente comando:

Mando: 'Git branch -D branch_name'

Con el comando anterior, el desarrollador eseliminar con fuerza la rama que anula la advertencia de git

$ git branch -D preprod

Salida

Nota : La rama 'preprod' ya no aparecerá en la lista cuando ejecute el comando 'git branch'. Entonces, ynuestro trabajo guardado en esta rama se perderá.

Caso 2: un desarrollador elimina una rama en un repositorio compartido

Considere un escenario, donde un desarrollador con acceso de lectura / escritura intenta eliminar la rama remota a la fuerza alusando el comando 'git push' con la bandera '–delete'.

$ git push origin --delete quickfix

Salida

Aparte de esto, también podría darse el caso de que un usuario no autorizado o malintencionado fuerce un empujón para eliminar la rama remota.En tal caso, el encargado del mantenimiento podrá recuperar la rama de 'corrección rápida' eliminada solo si el desarrolladorhabía comprobado previamente esta rama. En este escenario, su repositorio local todavía tendrá registros de referencia del mismo.

Si el mantenedor no puede recuperar la rama, entonces el propietario de la rama que la eliminó debe recuperarse de sus reflogs locales.

Caso 3: un script de enlace con superprivilegios elimina la rama

Esto podría ser un escenario raro, pero posible en el que un script de gancho se activa en cierto evento de operación de git y la fuerza elimina las ramas que aún no se fusionaron. Usted puedeconsidere que uno de los comandos mencionados anteriormente está escrito en un script de gancho con privilegios de sudo.

Ahora que sabes lo que sucede, cuando eliminas la rama, sigamos con este artículo sobre Git Reflog y veamos cómo recuperar una rama perdida.

Recuperar una rama eliminada usando Git Reflog

Paso 1 : Registros históricos de todas las referencias

Obtenga una lista de todos los registros históricos locales registrados para todas las referencias ('master', 'uat' y 'prepod') en este repositorio.

ir a reflog

Paso 2 : Identificar el sello del historial

Como puede consultar en la instantánea anterior, el ID de compromiso resaltado: e2225bb junto con el índice del puntero HEAD: 4 es el que cuando ' reventa 'Se creó a partir del puntero HEAD actual que apunta a su último trabajo.

Paso 3 : Recuperar

Para recuperar el 'Reventa ‘Rama usa el comando'Git checkout' pasando la referencia del puntero HEAD con el ID de índice - 4.Esta es la referencia del puntero cuando se creó la rama 'preprod' con un ID de confirmación largo resaltado en la captura de pantalla de salida.

git checkout -b preprod HEAD @ {4}

Salida

¡Y voilá! ' reventa 'Branch se recupera con todo su código fuente.

NOTA : Déjame bRecupere el comando 'git checkout' que se usó anteriormente y lo ayudará a comprender mejor:

El comando 'git checkout' es un comando sobrecargado (como cualquier función sobrecargada de Java). Esta es la parte donde se recupera la rama real.

Este único comando se comprueba primero en la marca de tiempo del historial anterior señalada por el HEAD @ {4} puntero y luego crea una rama con el nombre 'preprod' usando la opción '-b' y cambia su directorio de trabajo a la rama recién creada.

Esto implica que la rama conmutada será de 'maestro' a 'preprod' como se indica en la pantalla de salida.Ahora puede fusionarlo con 'master' o la rama 'release' según su modelo de ramificación.

Ahora que sabe cómo restaurar una rama, permítame decirle qué trabajo se restaura cuando se recupera una rama eliminada.

¿Qué trabajo se restaura cuando se recupera la rama eliminada?

Los archivos que se almacenaron y guardaron en la lista del índice de reserva se recuperarán. Se perderán todos los archivos sin seguimiento. También yoEs una buena idea organizar y comprometer siempre su trabajo o guardarlo.

Para obtener las referencias de registro de una rama o etiqueta en particular, ejecute el comando 'git reflog'.

Ejemplo: Para verificar las referencias de registro de la rama 'uat' solo use el comando - 'git reflog uat'.

Subcomandos de Git Reflog

ir a reflog

Comando para abrir la página del manual

$ git reflog --help

Salida

ir a reflog show

Muestra los registros de la referencia proporcionada en la línea de comando.

git reflog show master @ {0}

ir a reflog expire

Este comando se utiliza para podar las entradas de registro anteriores.

git reflog expire

ir a reflog Eliminar

Este comando elimina entradas individuales del historial de reflog.

git reflog eliminar

ir a reflog existe

que es token en java

Este comando verifica si una referencia (rama o etiqueta) tiene un reflog - registrar entradas del historial.

git reflog existe

Aparte de los comandos mencionados anteriormente, el comando 'Git Reflog' toma varios subcomandos y diferentes opciones dependiendo de los subcomandos mencionados anteriormente. Para obtener más información, ejecute ' git reflog –help ”Desde la ventana de la terminal.

Con esto, llegamos al final de este artículo sobre Git Reflog.La intención de DevOps es crear software de mejor calidad de forma más rápida y con más confiabilidad, al tiempo que invita a una mayor comunicación y colaboración entre equipos. Si está intrigado por este artículo, c diablos el por Edureka, una empresa de aprendizaje en línea de confianza con una red de más de 250.000 alumnos satisfechos repartidos por todo el mundo. El curso Edureka DevOps Certification Training ayuda a los alumnos a comprender qué es DevOps y a adquirir experiencia en varios procesos y herramientas de DevOps, como Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack y GIT para automatizar varios pasos en SDLC.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios del artículo 'Git Reflog' y nos comunicaremos con usted lo antes posible.