Skip to content

Instantly share code, notes, and snippets.

@dublado
Created May 19, 2025 04:00
Show Gist options
  • Save dublado/748b5dd85dea213f3499548748b94699 to your computer and use it in GitHub Desktop.
Save dublado/748b5dd85dea213f3499548748b94699 to your computer and use it in GitHub Desktop.
Como Remover Arquivo do Histórico do Git

Como Remover Arquivo do Histórico do Git

Se você adicionou um arquivo sensível no seu repositório Git, como um arquivo de banco de dados, e deseja removê-lo completamente, incluindo do histórico, este guia explica como fazer isso de forma segura.


O que acontece quando você adiciona um arquivo no Git?

Quando um arquivo é adicionado e comitado no Git, ele fica registrado no histórico. Mesmo que depois você o coloque no .gitignore, os commits anteriores continuam contendo o arquivo, e qualquer pessoa pode acessá-lo se clonar o repositório.

Para remover qualquer traço do arquivo no histórico, é necessário reescrever esse histórico.


Como remover um arquivo do histórico com git filter-repo

git filter-repo é a ferramenta recomendada atualmente para esse tipo de operação, pois é mais rápida e segura que as alternativas antigas.

Passos

  1. Instale o git-filter-repo (caso ainda não tenha):
pip install git-filter-repo
  1. No diretório raiz do seu repositório, rode o seguinte comando, substituindo caminho/do/seu_arquivo.db pelo caminho exato do arquivo que deseja remover:
git filter-repo --invert-paths --path caminho/do/seu_arquivo.db
  1. Depois que o processo terminar, será necessário forçar o envio das alterações para o repositório remoto:
git push origin --force --all
git push origin --force --tags
  1. Limpe os dados antigos do Git localmente:
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now --aggressive

Avisos importantes

  • Este processo reescreve o histórico do repositório! Todos que colaboram precisarão re-clonar ou sincronizar cuidadosamente para evitar conflitos.
  • Sempre faça backup do seu repositório antes de executar operações que reescrevem o histórico.
  • Certifique-se de que o arquivo indesejado esteja listado no .gitignore para evitar que ele seja adicionado novamente.
  • Se preferir uma ferramenta gráfica, pode usar o BFG Repo-Cleaner.

Opção alternativa: usar git filter-branch (menos recomendada)

Se não quiser usar o git filter-repo, pode usar o filter-branch do Git, embora seja mais lento e propenso a erros:

git filter-branch --force --index-filter "git rm --cached --ignore-unmatch caminho/do/seu_arquivo.db" --prune-empty --tag-name-filter cat -- --all

Depois, force o push:

git push origin --force --all
git push origin --force --tags

Com esses passos, você garante que o arquivo será removido de todo o histórico do repositório e não ficará mais acessível, protegendo informações sensíveis.


Referências

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment