Apagando histórico de commits em um repo Git

bernardolankheet
2 min readOct 9, 2023

Frequentemente nos deparamos com situações em que precisamos limpar os commits anteriores dos nossos repositórios, seja por um commit de um usuário que não deviria ou por limpar sujeiras. Em alguns lugares encontramos sugestões para excluir a pasta .git, porem este processo pode causar sérios problemas no seu repositório. Aqui demonstro uma maneira segura e eficaz de realizar essa tarefa, e é isso que compartilharemos neste artigo.

Passo 1: Criar uma nova Branch

Para listar, por exemplo, os últimos 10 commits que possuímos no repositório, podemos utilizar.

git log -10 

Vamos iniciar criando uma nova branch no seu repositório a partir da atual. Isso significa que você criará uma nova branch que não tem histórico de commits, porem mantendo todos os arquivos intactos. Você pode fazer isso usando o seguinte comando:

git checkout --orphan new_branch

Substitua new_branch pelo nome que você deseja dar a sua branch.

Passo 2: Adicionar Todos os Arquivos

Agora que você está em uma nova branch , é hora de adicionar todos os arquivos.

git add -A

Isso adicionará todos os arquivos do diretório atual a new_branch.

Passo 3: Commit das Mudanças

Após adicionar todos os arquivos, é necessário fazer um commit dessas mudanças. Você pode usar o seguinte comando para fazer isso:

git commit -am "limpando commits anteriores"

Passo 4: Excluir o Branch Antigo

Agora que você tem um novo branch com o código atual e sem histórico de commits, pode excluir o branch antigo que deseja limpar. Por exemplo, se você deseja excluir a branch chamada de main, use o seguinte comando:

git branch -D main

Passo 5: Renomear o Novo Branch

Agora, renomeie a branch para main (ou o nome do branch que você deseja manter) usando o seguinte comando:

git branch -m main

Passo 6: Atualizar o Repositório Remoto

Finalmente, é necessário forçar a atualização do seu repositório remoto para refletir as mudanças. Use o seguinte comando:

git push -f origin main

Lembre-se de que este comando substituirá o branch main no repositório remoto com o novo branch que você criou, limpando totalmente o histórico de commits, porem mantendo todos os arquivos.

Ate mais!

--

--