Git Reflog - Como recuperar um branch excluído que não foi mesclado



Este artigo sobre Git Reflog é um guia abrangente de como restaurar o ramificado excluído no Git com a ajuda do Git Reflog.

“Você já perdeu um branch cujo código-fonte ainda não foi mesclado no branch‘ release ’ou no branch‘ principal ’? E se você quiser regenerar um branch excluído embora seu trabalho já tenha sido mesclado no branch principal? ” . Bem, a única solução para tais cenários é Go Reflog .

Por meio deste artigo no Git Reflog, irei ajudá-loentenda os cenários em que seu trabalho em uma filial pode ser perdido e como recuperar a filial.Além disso, este artigo destacará a abordagem que você pode adotar para evitar a perda não intencional de uma filial ao trabalhar em um grande projeto.





    1. O que é Git Reflog?
    2. Como e quando um branch é excluído?
    3. Recuperar uma filial excluída
    4. Que trabalho é restaurado quando o branch excluído é recuperado?
    5. Subcomandos Git Reflog

Então, vamos começar com este artigo.



Considere um cenário, um mO aintainer precisa mesclar muitos branches de recursos de diferentes colaboradores e, em seguida, excluí-los eventualmente, mas o branch é excluído acidentalmente antes que o trabalho pudesse ser mesclado?

Bem, antes de prosseguir neste artigo, deixe-me dizer que isso não é possível no Git. são seguros e atuam como um posto de controle não permitiriam que você fizesse isso. Então, é aqui que o Git Reflog entra em cena.

O que é Git Reflog?

oO comando ‘reflog’ mantém um rastreio cada mudança feita nas referências (branches ou tags) de um repositório e mantém um histórico de log dos branches e tags que foram criados localmente ou retirados. Logs de referência, como o instantâneo de confirmação de quando o branch foi criado ou clonado, check-out, renomeado ou qualquer commit feito no branch são mantidos por e listado pelo comando ‘reflog’.



Nota: O branch será recuperável de seu diretório de trabalho apenas se o branch já existiu em seu repositório local, ou seja, o branch foi criado localmente ou retirado de um repositório remoto em seu repositório local para que o Git armazene seus logs de histórico de referência.

Este comando deve ser executado no repositório que contém o branch perdido. Se você considerar osituação de repositório remoto, então você tem que executar o comando reflog na máquina do desenvolvedor que tinha o branch.

comando: vá reflog

Agora que você sabe o que é Git Reflog, deixe-nostente deletar um branch mesclado e um não mesclado e veja como o Git lida com isso?

Etapa 1: Liste os ramos que são mesclados no mestre

Primeiro, dê uma olhada no ‘ mestre 'Branch se você estiver em algum outro branch usando o comando:

$ git checkout master

Resultado

Git Checkout Master - Git Reflog - Edureka

Agora, para obter uma lista de branches mesclados, mencione o seguinte comando:

$ git branch --merged

Resultado:

Etapa 1.1: Em seguida, exclua o branch mesclado:

$ git branch -d issue # 902

Resultado:

O branch ‘issue # 902’ foi excluído com sucesso, pois já está mesclado no branch ‘master’.

Passo 2: Agora, vamos listar os branches que não foram mesclados no master.

$ git branch --no-merged

Resultado

Etapa 2.2: Finalmente, vamos excluir um branch não mesclado com o seguinte comando:

$ git branch -d prepod

Se você tentar deletar um dos branches com trabalho não finalizado, diga branch “preprod”, git exibe uma mensagem de aviso.

Resultado

Agora, antes de dizer como você pode recuperar os dados neste artigo sobre Git Reflog, deixe-me dizer o que exatamente acontece quando um branch é excluído e sob quais circunstâncias o branch pode ser recuperado.

o que é chef em devops

Como e quando um branch é excluído?

Como sabemos, o Git é um Sistema de controle de versão distribuída (DVCS), cada máquina com o clone ou uma cópia do repositório atua como ambos e um cubo . esteimplica que cada máquina terá sua própria cópia de todo o código e histórico do repositório.Nem preciso dizer que você será compartilhar seu trabalho com outros e publicação o mesmo.

Portanto, em tais cenários, pode haver 3 casos em que um branch é excluído em um cenário do mundo real com muitos colaboradores trabalhando em um grande projeto. Os seguintes podem ser os casos:

Caso 1 - Um desenvolvedor pode mesclar ou excluir o branch

Considere um cenário onde um desenvolvedor mescla o branch do recurso no branch principal localmente e, em seguida, exclui o branch do recurso usando o método ‘ ramo git 'Com o comando “- d ”Como visto nas imagens anteriores.

Comando: ‘Git branch -d branch_name’

Também pode acontecer que o desenvolvedor decida jogar no lixo as alterações no branch e decidir excluí-lo sem fundi-lo com qualquer outro branch usando o seguinte comando:

Comando: ‘Git branch -D branch_name’

Com o comando acima, o desenvolvedor éexclui forçosamente o branch sobrescrevendo o aviso do git

$ git branch -D preprod

Resultado

Nota : O branch ‘preprod’ não será mais listado quando você executar o comando ‘git branch’. Então, ynosso trabalho salvo neste ramo será perdido.

Caso 2 - um desenvolvedor exclui um branch em um repositório compartilhado

Considere um cenário, onde um desenvolvedor com acesso de leitura / gravação tenta excluir o branch remoto à força porusando o comando ‘git push’ com a sinalização ‘–delete’.

$ git push origin - delete correção rápida

Resultado

Além disso, também pode haver um caso em que um usuário não autorizado ou mal-intencionado força um push para excluir o branch remoto.Nesse caso, o mantenedor será capaz de recuperar o branch de 'correção rápida' excluído apenas se o desenvolvedorjá havia verificado este branch. Nesse cenário, seu repositório local ainda terá logs de referência dele.

Se o mantenedor não puder recuperar o branch, então o dono do branch que o deletou deve se recuperar de seus reflogs locais.

Caso 3 - Um script de gancho com superprivilégios exclui o ramo

Isso pode ser raro, mas um cenário possível em que um script de gancho seja acionado em determinado evento de operação git e force a exclusão dos branches que ainda não foram mesclados. Você podeconsidere um dos comandos mencionados acima sendo um script em um script de gancho com privilégios sudo.

Agora que você sabe o que acontece, quando você deleta o branch, vamos prosseguir com este artigo sobre Git Reflog e ver como recuperar um branch perdido.

Recupere um branch excluído usando Git Reflog

Passo 1 : Registros históricos de todas as referências

Obtenha uma lista de todos os registros de histórico locais registrados para todas as referências (‘master’, ‘uat’ e ‘prepod’) neste repositório.

vá reflog

Passo 2 : Identifique o selo da história

Como você pode consultar no instantâneo acima, o ID de confirmação em destaque: e2225bb junto com o índice do ponteiro HEAD: 4 é aquele quando ‘ revenda 'Branch foi criado a partir do ponteiro HEAD atual apontando para seu trabalho mais recente.

etapa 3 : Recuperar

Para recuperar o 'Revenda ‘Branch use o comando'Git checkout' passando a referência do ponteiro HEAD com o id do índice - 4.Esta é a referência do ponteiro quando o branch ‘preprod’ foi criado com o ID de commit longo destacado na captura de tela de saída.

git checkout -b preprod HEAD @ {4}

Resultado

E voila! ‘ revenda ‘Branch é recuperado de volta com todo o seu código-fonte.

NOTA : Deixe-me bReakup o comando ‘git checkout’ usado acima e ajude você a entender melhor:

O comando ‘git checkout’ é um comando sobrecarregado (assim como qualquer função sobrecarregada de Java). Esta é a parte onde o ramo real é recuperado.

Este único comando verifica primeiro o registro de data e hora do histórico anterior apontado pelo Ponteiro HEAD @ {4} e então cria um branch com o nome ‘preprod’ usando a opção “-b”, bem como muda seu diretório de trabalho para o branch recém-criado.

Isso implica que a ramificação alternada será de 'mestre' para 'pré-produto', conforme indicado na tela de saída.Agora você pode fundi-lo com o branch ‘master’ ou ‘release’ de acordo com o seu modelo de branching.

Agora que você sabe como restaurar um branch, deixe-me dizer qual trabalho é restaurado quando um branch excluído é recuperado.

Que trabalho é restaurado quando o branch excluído é recuperado?

Os arquivos que foram armazenados e salvos na lista de índices do armazenamento serão recuperados. Todos os arquivos não rastreados serão perdidos. Eu tambémÉ uma boa ideia sempre organizar e comprometer seu trabalho ou armazená-los.

Para obter as referências de log de um determinado branch ou tag, execute o comando - “git reflog”.

Exemplo: Para verificar as referências de log do branch ‘uat’ sozinho, use o comando - “git reflog uat”.

como se tornar um desenvolvedor de tableau

Subcomandos Git Reflog

vá reflog

Comando para abrir a página do manual

$ git reflog --help

Resultado

vá reflog mostrar

Mostra os logs da referência fornecida na linha de comando.

git reflog show master @ {0}

vá reflog expirar

Este comando é usado para remover as entradas de reflog mais antigas.

git reflog expire

vá reflog excluir

Este comando exclui entradas únicas do histórico de reflog.

git reflog delete

vá reflog existe

Este comando verifica se um ref (branch ou tag) tem entradas de histórico reflog - log.

git reflog existe

Além dos comandos mencionados acima, o comando “Git Reflog” leva vários subcomandos e diferentes opções dependendo dos subcomandos mencionados acima. Para mais leituras, execute “ git reflog –help ”Na janela do terminal.

Com isso, chegamos ao fim deste artigo sobre o Reflog do Git.A intenção do DevOps é criar software de melhor qualidade com mais rapidez e confiabilidade, ao mesmo tempo em que convida a uma maior comunicação e colaboração entre as equipes. Se você está intrigado com este artigo, c diabos o pela Edureka, uma empresa de aprendizagem online confiável com uma rede de mais de 250.000 alunos satisfeitos espalhados por todo o mundo. O curso Edureka DevOps Certification Training ajuda os alunos a entender o que é DevOps e ganhar experiência em vários processos e ferramentas DevOps, como Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack e GIT para automatizar várias etapas no SDLC.

Tem alguma questão para nós? Mencione isso na seção de comentários do artigo ”Git Reflog” e entraremos em contato com você o mais rápido possível.