Perdeste arquivos no Git? Recupere arquivos excluídos e não confirmados

Recuperar arquivos perdidos do Git que foram excluídos ou não foram confirmados

Uma troca de ramificação faz com que sua pasta de origem pareça vazia. Uma reinicialização total apaga as edições feitas esta manhã. Ou um comando de limpeza exclui um script que você nunca confirmou. Esses Arquivos perdidos no Git As situações parecem semelhantes, mas o método correto de recuperação depende do fato de o Git ter armazenado ou não o conteúdo ausente.

O fato de um arquivo não estar presente na sua pasta de trabalho não significa necessariamente que ele tenha sido removido do repositório. Um commit, a área de preparação, outro branch ou um stash ainda podem conter uma cópia utilizável. Comece verificando esses locais antes de fazer uma varredura no disco.

Este guia segue essa ordem. Se o Git não tiver nenhuma cópia e o arquivo original tiver desaparecido do armazenamento, o guia de recuperação de arquivos excluídos aborda o próximo ramo. Para esse cenário específico do Windows, Magic Data Recovery oferece uma opção de recuperação no nível do armazenamento; não reconstrói o histórico do Git.

Índice

Arquivos perdidos no Git: escolha o método correto de recuperação

A resposta mais rápida: Recupere um arquivo rastreado a partir do índice ou de um commit conhecido. Verifique o reflog em busca de commits perdidos e o histórico local em busca de edições que o Git nunca salvou. Use a recuperação do disco somente quando não houver mais nenhuma cópia utilizável.

O que aconteceu?

Nos casos em que possa existir uma cópia

Comece por aqui

Você excluiu um arquivo rastreado sem preparar a exclusão

Índice do Git

Restaurar o caminho individual

Você preparou a exclusão ou utilizou git rm

O último commit

Restaurar esse caminho a partir de TÍTULO

Você confirmou a exclusão

Um commit anterior

Encontre uma revisão que contenha o arquivo

Um reset, rebase ou amend ocultou um commit

Registro de reflog local

Crie um branch de recuperação no commit anterior

Você preparou o conteúdo, mas nunca o salvou

Índice ou objetos blob remanescentes

Verifique o índice e, em seguida, examine os objetos

Você nunca adicionou, confirmou ou salvou o conteúdo em stash

Histórico de edições, backups, disco original

Verifique as cópias antes da recuperação do disco

Os arquivos desapareceram após a troca de branches

Outra configuração de ramificação ou checkout

Confirme primeiro o local e a filial

Essa distinção é importante para Recuperar arquivos não confirmados no Git buscas: “não confirmado” inclui tanto o conteúdo preparado quanto as alterações que o Git nunca armazenou. Esses dois casos têm limites de recuperação diferentes.

Proteja o repositório antes de executar os comandos

Interrompa as compilações, as instalações de dependências e a limpeza automatizada. Se a unidade estiver funcionando normalmente, copie o repositório para outra unidade física, incluindo os metadados ocultos do Git. Uma clonagem normal não preserva todas as pistas de recuperação locais, como o índice, o reflog e os objetos inacessíveis.

Para árvores de trabalho vinculadas ou submódulos, .git pode ser um arquivo de ponteiro, em vez de um diretório. Preserve também o diretório do Git ao qual ele faz referência. Se você suspeitar de falha física no disco, interrompa a cópia e a verificação normais e procure ajuda profissional para a recuperação.

Proteja o repositório antes de executar os comandos

Evite usar estes comandos durante a recuperação:

  • git reset --hard, que descarta as alterações de trabalho rastreadas e pode remover caminhos não rastreados que estejam obstruindo o processo.
  • git clean -fd ou git clean -fdx, que remove o conteúdo não rastreado; -x também inclui os arquivos ignorados.
  • git gc --prune=now e git prune, o que pode excluir objetos dos quais você ainda precisa.

O Git’s redefinição da documentação e documentação clara explicar esses efeitos. Normalmente, não é necessário reverter todo o repositório quando falta apenas um arquivo.

Use os exemplos abaixo, a partir da raiz do repositório. Substitua os nomes de arquivos e hashes de exemplo pelos seus próprios. Os comandos de restauração exigem o Git 2.23 ou posterior e funcionam no Git Bash no Windows, bem como nos terminais do macOS e do Linux.

Verifique se o arquivo está faltando ou se simplesmente está em outro lugar

Antes de tentar Recuperação de arquivos no Git, confirme qual repositório e qual branch você abriu:

  1. git rev-parse –show-toplevel
  2. git status --short
  3. git branch --show-current
  4. git branch --all

Em seguida, faça uma busca no Explorer ou no Finder usando o nome exato do arquivo, a extensão e a data aproximada de modificação. Verifique outro checkout, uma pasta de projeto renomeada, um dispositivo de armazenamento externo e as pastas excluídas do seu editor.

Três conceitos do Git explicam a maior parte Arquivos perdidos no Git casos:

  • Árvore de trabalho: os arquivos que você está editando no momento.
  • Índice: o conteúdo que você selecionou com git add para o próximo commit.
  • Confirmar: um instantâneo de projeto salvo no histórico do Git.

O Git não salva automaticamente todas as edições. A preparação (staging) captura o conteúdo naquele momento; portanto, edições posteriores podem existir apenas na sua árvore de trabalho. Consulte a documentação do Git sobre guia para registrar alterações.

Recuperar arquivos excluídos no Git antes de fazer o commit

Melhor para: um arquivo rastreado que você excluiu localmente, embora o repositório ainda contenha seu conteúdo.

Primeiro, verifique o caminho:

  1. git status --short -- src/app.js
  2. git diff -- src/app.js
  3. git diff --cached -- src/app.js

No resumo de status, a primeira coluna descreve as alterações no índice; a segunda, as alterações na árvore de trabalho. D significa uma exclusão não escalonada. D significa uma deleção em etapas.

Restaurar uma exclusão não agendada do índice

Para recuperar arquivos excluídos no Git quando o índice ainda contiver o arquivo:

  1. git restore -- src/app.js

Isso restaura a versão preparada para envio, que pode diferir do último commit. Por exemplo, se você preparou uma função atualizada para envio antes de excluir o arquivo, o Git pode recuperar esse conteúdo preparado. No entanto, esse comando não permite recuperar edições posteriores que não tenham sido preparadas para envio.

Restaurar uma exclusão agendada a partir do HEAD

Se você tiver marcado o arquivo para exclusão, o índice não o contém mais nesse caminho. Após preservar qualquer cópia útil, restaure sua última versão confirmada:

  1. git restore --source=HEAD --staged --worktree -- src/app.js

Isso altera tanto o índice quanto o arquivo de trabalho para esse caminho. Não recupera uma versão mais recente que ainda não tenha sido confirmada. O Git’s restaurar a documentação explica as opções de origem e destino.

Para um arquivo recém-adicionado em um repositório sem commits, TÍTULO ainda não existe. Se o índice ainda contiver o arquivo, use o método baseado no índice.

Restaurar um arquivo a partir de um commit anterior ou de outro branch

Melhor para: uma exclusão confirmada, uma versão mais antiga do arquivo ou um arquivo que está faltando apenas no seu branch atual.

Vamos começar pela história:

  1. git log --all --oneline -- src/app.js

Se você não conseguir se lembrar do caminho antigo, liste os registros de exclusão:

  1. git log --all --diff-filter=D --summary

Verifique um commit candidato antes de restaurar qualquer coisa:

  1. git show abc1234:src/app.js

Substituir abc1234 com um commit que realmente contenha o arquivo. Em seguida, restaure apenas esse caminho:

  1. git restore --source=abc1234 -- src/app.js

Se abc1234 é o commit de exclusão; verifique seu pai com git show abc1234^:src/app.js. No caso de uma simples exclusão, o pai pode conter a versão desejada. Os commits de mesclagem têm vários pais; portanto, verifique o conteúdo em vez de presumir que o primeiro pai está correto.

Para Arquivos ausentes no Git após a troca de branches, verifique o branch que contém o arquivo:

  1. git show feature/login:src/app.js
  2. git restore --source=feature/login -- src/app.js

Esses exemplos preservam seu branch atual e outros arquivos. Verifique o Documentação do histórico do Git para pesquisas no histórico e o Exibir a documentação do Git para verificar o conteúdo armazenado. As pesquisas no histórico podem precisar do nome antigo do arquivo, caso alguém tenha renomeado o arquivo.

Use o Reflog para recuperar alterações perdidas no Git após um reset

Melhor para: trabalho confirmado que desapareceu da história visível após um reset, rebase, amend ou criação de ramificação.

Para Recuperação após um `git reset hard`, verifique seu histórico de referências locais:

  1. git reflog –date=local

Procure o commit anterior à operação indesejada. Verifique seu conteúdo e, em seguida, salve-o em um novo ramo com o seguinte nome:

  1. git show –stat abc1234
  2. git branch recovery-lost-work abc1234

A criação do branch não altera sua árvore de trabalho. Você pode verificar ou restaurar arquivos individuais a partir dele posteriormente.

O Reflog não registra todas as edições feitas nos arquivos. Ele registra os movimentos de referência. Se o conteúdo ausente nunca tiver sido incluído em um commit, o reflog por si só não poderá recuperá-lo. As entradas e os objetos também têm retenção limitada. O Git explica o mecanismo em seu documentação do reflog.

Para Arquivos perdidos no Git após excluir um branch, o guia oficial de recuperação de dados do Git descreve como recuperar commits que sobreviveram. Preserve imediatamente um commit útil assim que identificá-lo.

Verificar o conteúdo armazenado e o conteúdo preparado, mas ainda não confirmado

Recuperar arquivos de um esconderijo

Antes de assumir Alterações perdidas no Git de forma definitiva, verifique se você os guardou:

  1. git stash list
  2. git stash show –include-untracked –name-only ‘stash@{0}’
  3. git stash show -p –include-untracked ‘stash@{0}’

Escolha o stash com base em seu conteúdo, e não apenas na data. Em uma cópia protegida com uma árvore de trabalho limpa, aplique a entrada correta:

  1. git stash apply ‘stash@{0}’

Diferente de pop, aplicar mantém o item na lista de itens guardados. Isso pode causar conflitos; portanto, verifique o resultado antes de continuar.

Um stash padrão não inclui arquivos não rastreados. Esses arquivos exigem -u ao criar o stash; os arquivos ignorados exigem -a. Consulte o Documentação do Git stash.

Recuperar conteúdo em fase de preparação a partir de objetos remanescentes

Para Recuperar arquivos não confirmados no Git casos em que você já executou git add, verifique se o índice ainda contém o conteúdo:

  1. git ls-files –stage — src/app.js
  2. git show :src/app.js

O segundo comando exibe a versão indexada. O Documentação do comando `ls-files` do Git descreve como verificar as entradas do índice.

Se uma redefinição tiver substituído o índice, um blob contendo o conteúdo em fase de preparação ainda pode permanecer. Trabalhe na sua cópia preservada do repositório:

  1. git fsck –full –no-reflogs –unreachable

Para um bolha inacessível candidato, verifique o conteúdo:

  1. git cat-file -p BLOB_HASH

Substituir BLOB_HASH com um ID de objeto real. Procure por uma função, um comentário ou um valor de configuração característico. Os blobs contêm conteúdo, e não o nome do arquivo original; portanto, a identificação pode levar algum tempo.

No caso de objetos pendurados, git fsck --lost-found escreve material de recuperação sob .git/lost-found/. Ele não garante a exportação de todos os objetos inacessíveis nem a recriação de uma árvore de diretórios completa. Consulte Git fsck e Git cat-file.

Exporte um blob confirmado para um novo arquivo em outra unidade usando o redirecionamento de saída do Git Bash ou um método de exportação que preserve os bytes. Evite copiar conteúdo binário da saída do terminal. Essa abordagem ajuda a Recuperação de arquivos marcados no Git, mas apenas enquanto os objetos em questão permanecerem intactos.

Recupere arquivos não rastreados por meio do histórico do editor e de backups

Melhor para: arquivos excluídos ou edições mais recentes que o Git nunca adicionou, confirmou ou armazenou temporariamente.

Para recuperar arquivos não rastreados, verifique seu editor antes de fazer a varredura no armazenamento. No VS Code, abra a Paleta de Comandos e execute:

  1. História local: Encontre o registro a ser restaurado

Selecione o arquivo ausente, verifique as entradas disponíveis e compare seu conteúdo. Para um arquivo existente, a visualização “Linha do tempo” também pode exibir o histórico local. A disponibilidade depende das entradas salvas, das configurações e do período de retenção; não se trata de um registro garantido do que foi digitado, mas não salvo. A Microsoft documenta isso no Guia da interface do usuário do VS Code.

Em seguida, verifique a Lixeira, os itens excluídos na nuvem, o histórico de versões na nuvem e os backups do sistema. Os comandos de exclusão no Terminal podem ignorar a Lixeira. Verifique o caminho de armazenamento original, em vez de presumir que todos os arquivos do projeto estavam dentro do repositório.

Um repositório remoto pode restaurar commits enviados, mas não contém automaticamente arquivos locais não rastreados, edições não salvas ou stashes privados. Pergunte aos colegas de equipe se há cópias separadas, caso o trabalho perdido tenha sido compartilhado em outro lugar.

Para git clean recovery, essas cópias externas são especialmente importantes: o Git não consegue recuperar conteúdo que nunca foi armazenado simplesmente porque a exclusão ocorreu dentro de um repositório.

Quando os arquivos perdidos no Git exigem recuperação do disco

Só inicie a recuperação do armazenamento depois de responder a estas perguntas:

  1. O branch, índice, commit, stash ou objeto remanescente correto contém a versão necessária?
  2. O seu editor, o histórico na nuvem ou o backup podem fornecer isso?
  3. O arquivo em si está faltando no local de armazenamento original?
  4. O dispositivo permanece estável e detectável?

Se não houver nenhuma cópia utilizável e o arquivo tiver realmente desaparecido, Arquivos perdidos no Git torna-se um problema no nível do disco. Exemplos incluem um script não rastreado removido pela limpeza, um diretório de projeto excluído ou uma unidade formatada que contém trabalhos locais.

Recupere arquivos de projeto excluídos com o Magic Data Recovery

Magic Data Recovery oferece suporte a cenários de recuperação do Windows envolvendo exclusão, formatação e erros no sistema de arquivos. Seu fluxo de trabalho de varredura e filtragem oferece uma maneira prática de inspecionar arquivos de projeto recuperáveis quando o Git não possui nenhuma cópia armazenada.

Compatível com Windows 7/8/10/11 e Windows Server

A vantagem relevante é o alcance: o Git pesquisa em seus próprios registros, enquanto essa ferramenta faz a varredura no armazenamento original. No caso de um script local ou arquivo de projeto excluído, isso torna essa ferramenta uma opção mais adequada do que executar repetidamente comandos do Git. O fluxo de trabalho visual de varredura e revisão também permite que você verifique os itens em questão antes de restaurá-los ao projeto.

Recupere arquivos de projetos Git excluídos com o Magic Data Recovery

Siga estas quatro etapas:

  1. Faça a instalação com segurança. Instale e execute a ferramenta a partir de outra unidade ou computador, sempre que possível. Reduza ao mínimo as gravações no dispositivo afetado.
  2. Digitalize o volume original. Selecione a unidade em que estavam os arquivos ausentes, mesmo que sua versão atual esteja em outro local.
  3. Analisar os candidatos. Utilize os filtros disponíveis para nome de arquivo, caminho e tipo. Visualize os formatos compatíveis; verifique os arquivos de origem em um editor após a exportação.
  4. Recupere-se em outro lugar. Salve os arquivos selecionados em uma unidade física diferente e mantenha o repositório original intacto até a verificação.

A recuperação pode retornar versões mais antigas, arquivos incompletos ou nomes alterados. A ferramenta não consegue recriar código não salvo, reconstruir relações de commit ausentes nem restaurar dependências automaticamente. Sua utilidade neste contexto reside no fato de lidar com a perda efetiva de dados armazenados após o fracasso das opções nativas de recuperação.

Valide os arquivos recuperados antes de voltar a participar do projeto

Para Recuperação de arquivos perdidos no Git, sucesso significa conteúdo utilizável, não apenas um nome de arquivo em um resultado de varredura.

Abra os arquivos de código-fonte recuperados em uma pasta separada. Verifique as funções importantes, a codificação, os finais de linha e se as alterações mais recentes realmente existem. O tamanho do arquivo e os carimbos de data e hora oferecem pistas, mas não comprovam que você encontrou a versão correta.

Compare o candidato com o projeto atual. Copie apenas os arquivos verificados para um checkout de trabalho protegido e faça a revisão git diff, e execute a compilação ou os testes pertinentes. Verifique os arquivos de configuração e os recursos externos separadamente.

Por fim, confirme as alterações restauradas em um branch de recuperação. Evite substituir um inteiro .git diretório com metadados parcialmente recuperados; recupere o conteúdo de origem separadamente caso a integridade do repositório continue incerta.

Se a recuperação falhar, verifique a limitação

Uma varredura mais profunda não consegue recuperar o conteúdo sobrescrito. O TRIM do SSD e a limpeza subsequente do dispositivo também podem tornar os dados excluídos indisponíveis. A Microsoft’s Orientações para a recuperação de arquivos no Windows recomenda reduzir o uso da unidade e salvar os dados recuperados em uma unidade separada.

Se o dispositivo se desconectar repetidamente, emitir ruídos incomuns ou apresentar erros de leitura, interrompa as varreduras repetidas. Para garantir a estabilidade do dispositivo, verifique novamente o volume original e quaisquer backups externos antes de tentar usar outro software.

Alguns Arquivos ausentes no Git É preciso uma explicação diferente. O checkout esparso deixa intencionalmente alguns caminhos rastreados fora da árvore de trabalho, enquanto os submódulos mantêm o conteúdo do repositório separado. Verifique essas configurações antes de tratar uma pasta vazia como se tivesse sido excluída. Documentação do Git checkout esparso e inicialização do submódulo.

Evite a perda de arquivos no Git em trabalhos futuros

Salve marcos importantes e envie ramificações relevantes para um repositório remoto. Antes de limpar uma área de trabalho, visualize os caminhos afetados com git clean -nd; se você pretende incluir arquivos ignorados, verifique git clean -ndx também.

Mantenha o histórico local do editor ativado e faça backup da pasta completa do projeto. Inclua recursos não rastreados e ativos externos que um remoto do Git não possa substituir. Revise .gitignore deliberadamente: ignorar um arquivo importante não gera um backup dele.

Antes de fazer um reset ou um rebase, salve o trabalho em andamento e verifique o que seu backup ou stash realmente contém. Uma rápida verificação agora pode poupar horas de reconstrução mais tarde.

Conclusão: Comparar os arquivos perdidos do Git com a cópia que ainda existe

O melhor Arquivos perdidos no Git A solução depende de onde a versão perdida ainda esteja disponível. Use o índice ou um commit para arquivos rastreados, o reflog para commits perdidos e o histórico do editor ou backups para conteúdos que o Git nunca armazenou.

Se essas verificações confirmarem uma perda efetiva de dados armazenados, Magic Data Recovery é uma opção viável no Windows, pois lida com exclusões, formatações e erros no sistema de arquivos que vão além dos registros do Git. Siga as instruções do guia de recuperação de arquivos excluídos, salve os candidatos em outro local e verifique o código antes de enviá-lo de volta ao seu projeto.

Compatível com Windows 7/8/10/11 e Windows Server

Perguntas frequentes

1. O Git consegue recuperar arquivos que nunca foram submetidos?

Às vezes. O Git ainda pode conter conteúdo que você preparou com git add ou salvo em um repositório. Se o Git nunca armazenou a versão ausente, verifique o histórico local do editor, os backups e as cópias na nuvem. A recuperação do disco pode ajudar após a exclusão efetiva, mas não é possível reconstruir o código que existia apenas na memória.

2. Como faço para recuperar um arquivo excluído sem ter que redefinir tudo?

Para uma exclusão não preparatória, use git restore -- caminho/para/o/arquivo. Se você tiver preparado a exclusão, restaure o caminho a partir de TÍTULO com --marcado para envio --árvore de trabalho. Para uma exclusão definitiva, identifique uma revisão anterior que contenha o arquivo e restaure apenas esse caminho. Preserve o conteúdo mais recente antes de substituir qualquer coisa.

3. O `git reflog` recupera alterações não confirmadas?

O reflog registra movimentos de referência, não um histórico de todas as edições. Ele pode ajudar a localizar um commit perdido após um reset, rebase ou amend. Para conteúdo não confirmado, verifique o índice, os stashes, os blobs remanescentes ou o histórico do editor. O reflog, por si só, não consegue recuperar uma versão que o Git nunca armazenou.

4. É possível recuperar arquivos após executar o comando `git clean -fd`?

Possivelmente, por meio do histórico do editor, backups, cópias na nuvem ou recuperação do disco. O comando remove arquivos e diretórios não rastreados. Se o Git nunca armazenou o conteúdo deles, seu histórico não poderá restaurá-los. Interrompa a gravação na unidade afetada, verifique outras cópias e faça a varredura somente se o dispositivo permanecer estável.

5. Por que o `git pull` mostra “em dia” quando faltam arquivos?

O comando `pull` integra o histórico remoto; ele não garante a recriação de todos os arquivos ausentes na árvore de trabalho quando não há novos commits a serem integrados. Verifique git status e recupere as exclusões rastreadas a partir da fonte apropriada. Verifique também seu branch atual, as configurações de sparse-checkout e se a pasta ausente pertence a um submódulo.

6. Onde o Git armazena os arquivos “lost-found”?

Para um repositório padrão, git fsck --lost-found grava objetos de recuperação pendentes em .git/lost-found/commit/ ou .git/lost-found/other/. As entradas do tipo “blob” contêm o conteúdo dos arquivos, mas geralmente não possuem os nomes originais dos arquivos. Em árvores de trabalho vinculadas, localize o diretório real de metadados do Git antes de procurar por essas pastas.

7. O Magic Data Recovery consegue restaurar todo o repositório Git?

Ele pode recuperar arquivos que sobreviveram do armazenamento afetado, mas a recuperação de arquivos não garante que o repositório esteja intacto. O Git também precisa de objetos, referências e metadados consistentes. Recupere primeiro os arquivos-fonte para outra unidade, valide seu conteúdo e reconstrua a partir de um repositório que se saiba estar correto, caso os metadados continuem incompletos.

8. A restauração de uma versão mais antiga do Git recupera minhas edições mais recentes?

Não. A restauração a partir de um commit fornece a versão contida nesse commit. A restauração a partir do índice fornece a versão preparada para envio. Nenhuma das duas opções inclui automaticamente as edições posteriores que não foram preparadas para envio. Procure essas alterações separadamente no histórico do editor, em um stash ou em outra cópia salva e, em seguida, compare as versões recuperadas.

Jason é especialista em recuperação de dados e suporte técnico, com mais de 15 anos de experiência prática. Ele tem trabalhado extensivamente com usuários finais, resolvendo casos complexos de perda de dados e oferecendo soluções práticas de recuperação para exclusões acidentais, unidades formatadas, sistemas de arquivos danificados, partições perdidas, falhas de sistema e outras emergências de recuperação. Sua especialização também abrange backup e restauração, reparo de arquivos e recuperação de desastres, com forte ênfase em orientações seguras, confiáveis e tecnicamente precisas.